.net-MyArray内のMyObjectとしての各Objについて—これは何も実装しなくても実行可能ですか?

StackOverflow https://stackoverflow.com/questions/1620186

  •  06-07-2019
  •  | 
  •  

質問

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)

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top