class Sample{
public static void main (String[] args) {
Sample s = new Sample();
s.printVal(null);
}
public static void printVal(Object i){
System.out.println("obj called "+i);
}
public static void printVal(Integer i){
System.out.println("Int called "+i);
}
}
Вывод Int называется NULL, и поэтому неопределенность с char [] и Integer
Короткий ответ - да.
, Очевидно, тем не менее, порядок пунктов в наборе не может состоять точно в том, поскольку они были вставлены, в зависимости от типа набора (словарь, например).
, Но Вы получите те же результаты каждый раз, когда Вы выполняете итерации по единственному, неизмененному набору с помощью цикла foreach.
Это зависит от типа набора. Для большинства наборов ответ - "Да".
Однако это не гарантируется. Документы типа набора должны указать, делает ли он, но поскольку большинство делает, та деталь обычно по посмотревшему. Однако, если бы это не стабильно, это был бы огромный контроль, если бы документы не упоминали это.
Вы не можете гарантировать это, если Вы не будете знать конкретную реализацию класса, Вы выполняете итерации.
Наборы, которые имеют определенный порядок элемента (например, List<T>
) перечислят в стабильном порядке.
Для наборов, где состояние объекта не изменяется, очень вероятно, что элементы возвратятся в том же порядке, например, Dictionary<K,V>
, хотя это не гарантируемое спецификацией.
Как пример того, где это не имело бы место, Вы могли вообразить основанную на хеш-таблице реализацию словаря, которая уплотняет или изменяет размер таблицы асинхронно. Такая реализация не гарантировала бы стабильного итеративного порядка.
В то время как ответ является “yes” для всех встроенных наборов и вероятно любого нормального класса набора там, документация не имеет никаких ограничений сформулированными для IEnumerable
. Поэтому ничто не говорит нам, что каждое повторение должно быть стабильным.
я мог вообразить следующий вариант использования:
foreach (int i in new Shuffler(1, 2, 3, 4, 5, 6, 7, 8, 9))
Console.WriteLine(i);
Это могло бы хорошо быть реализовано как класс, который приводит к другому упорядочиванию для каждого повторения.
Так †“, если Вы также хотите рассмотреть странные промежуточные случаи, ответ должен быть “ никакой ”.
В то время как обычно, элементы будут возвращены в том же порядке, нет абсолютно никакой гарантии. Это - полностью иждивенец на внутренней реализации класса набора.
я вижу случай для класса набора, это специально предназначено для возврата элементов в произвольном порядке, например.
Короче говоря, если Вы не знаете, внутренняя реализация класса набора, не делают , принимают что-либо о порядке.
Я сказал бы, что для большей части набора безопасно принять это. Это не вне областей возможности, что определенному набору можно было реализовать перечислитель недетерминированным способом, но это, вероятно, не собирается происходить...
"Неизмененное" ре (ответ NM) - отмечает, что много сложных контейнеров как Словарь не гарантируют, что сохранили порядок. Иногда добавление объекта заставит его появиться в последний раз (производящий впечатление, что порядок сохраняется), и иногда это будет заставлять внутренние блоки реорганизовывать, давая совершенно другое распоряжение.
Вещи как SortedList<> и т.д., очевидно, имеют их собственные правила.