私はSystem.Collections.Specialized.StringDictionary
つまずいと、このようvar
キーワードを使用して、そのエントリを反復処理しようとしています:StringDictionaryを反復処理は、C#で匿名型を使用して
StringDictionary sd = new StringDictionary();
sd.Add("key", "value");
foreach(var v in sd)
{
Console.WriteLine(v.Key);
}
私は、これはコンパイラエラーを生成することを発見して驚いた。
'object' does not contain a definition for 'Key' and no extension method 'Key' accepting a first argument of type 'object' could be found
var
の代わりにSystem.Collections.DictionaryEntry
を使用すると、すべて正常に機能します。何らかの理由で匿名型を使用していると、コンパイラはオブジェクトのコレクションとしてStringDictionary
を処理していますが、その理由を知りたいと思います。何が起こっているのですか?
ところで、私はforeach
で実際に匿名タイプを使用するつもりはありません。私はそれがうまくいくと思ったように動作しない理由について疑問に思っています。ありがとうございました。
Excelent答え、ありがとうございます。私は新しいコードで 'StringDictionary'を使用していません、私はちょうど古いコードでそれを見つけて、それと対話する必要がありました。 – Fila
@FilipStočesそう、それは時々起こる。私は、 'var'を使うことが、このような場合を除いてほとんどの場合推奨されると思います。私は 'foreach'ループ変数に' var'を厳密に使用することで回避できる無効なキャストからのバグを見てきました。 –