.net - Для каждого объекта в качестве MyObject в MyArray - это выполнимо, ничего не реализуя? - PullRequest
0 голосов
/ 25 октября 2009

Я использую VS2008.

Хорошо ли следующее для создания следующего VB.NET с очень простым классом (см. Ниже)?

for each CurrentObject as MyObject in MyArray
  'access current object
next

«Простой класс»:

Class MyObject
  public I as integer
end class

Кажется, я помню, что что-то нужно для iEnumerable, но мой компилятор не жалуется.

Редактировать: Разъяснение

Ответы [ 2 ]

1 голос
/ 25 октября 2009

Это совершенно нормально.

Внутренне, в .NET есть ваш массив MyArray, реализующий IEnumerable, который и ищет компилятор, когда вы используете цикл foreach такого рода.

Так что вам больше ничего не нужно делать.

Действительно, если MyArray уже объявлен как массив MyObject, вам не понадобится приведение к MyObject, поэтому

Dim MyArray(20) As MyObject
for each CurrentObject in MyArray  
    'access current object
next

всегда будет работать просто отлично, так как CurrentObject всегда будет иметь тип MyObject.

Приведение требуется только в том случае, если нечего сказать .NET, какой тип содержится в вашем массиве.

1 голос
/ 25 октября 2009

For Each работает только для типов, которые реализуют IEnumerable, как правило, коллекции. Вы должны знать, что приведение элементов, которое происходит для каждого элемента коллекции, выполняется в время выполнения , поэтому, даже если код компилируется, он может завершиться ошибкой при выполнении.

Подробнее об этом можно прочитать в MSDN: Для каждого ... Следующее утверждение (Visual Basic)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...