.net-MyArray内のMyObjectとしての各Objについて—これは何も実装しなくても実行可能ですか?
質問
VS2008を使用しています。
次のVB.NETを非常に単純なクラスで実行しても問題ありませんか(以下を参照)
for each CurrentObject as MyObject in MyArray
'access current object
next
「単純なクラス」:
Class MyObject
public I as integer
end class
iEnumerableが必要なことを覚えているようですが、私のコンパイラは文句を言っていません。
編集:明確化
解決
これはまったく問題ありません。
内部的に、.NETには配列MyArrayにIEnumerableが実装されています。これは、この種のforeachループを使用するときにコンパイラが検索して使用するものです。
したがって、これ以上何もする必要はありません。
実際、MyArrayがMyObjectの配列として既に宣言されている場合、MyObjectにキャストする必要はないので、
Dim MyArray(20) As MyObject
for each CurrentObject in MyArray
'access current object
next
CurrentObjectは常にMyObject型であるため、常に正常に機能します。
.NETに配列に含まれる型を伝えるものが何もない場合にのみ、キャストが必要です。
他のヒント
For Each
は、 IEnumerable
を実装する型、通常はコレクションでのみ機能します。コレクションの各要素で発生するアイテムのキャストは runtime で行われるため、コードがコンパイルされても実行時に失敗する可能性があることに注意してください。
これについての詳細は、MSDNで読むことができます: For Each ... Nextステートメント(Visual Basic)
所属していません StackOverflow