27


3

foreach(DataTable.Rowsのvar Item)ができないのはなぜですか?

次のことができない理由があります:

foreach (var Item in DataTable.Rows) {

やるよりも

foreach (DataRow Item in DataTable.Rows) {

他のデータ型と同じように、これは可能だと思っていたでしょう。 例えば:

foreach (var Employee in Staff) { // string[] Staff etc...

最初のforeachループを試すと、エラー* CS0021:[]を使用したインデックス付けを 'object' *型の式に適用できません。

コンパイラが.RowsがDataRowsのコレクションを返すことを理解できないのはなぜですか?

2 Answer


28


Rows`は実質的に IEnumerable`( DataRowCollection)を返すため、コンパイラは` object`を `var`の型としてのみ選択できます。 「var」を使用する場合は、「Rows.Cast」を使用します。

`Cast`はhttp://msdn.microsoft.com/en-us/library/bb341406.aspx[Enumerable]で定義されているため、System.Linqを含める必要があります。


23


ブライアンはこの理由について絶対に正しいが、それを避ける簡単な方法がある:http://msdn.microsoft.com/en-us/library/system.data.datatableextensions.asenumerable.aspx [DataTableExtensions.AsEnumerable( )]:

foreach (var row in DataTable.AsEnumerable())
{
    ...
}