私はちょうど今、この奇妙な状況に出くわしました: 次のようなレガシーコードを編集していました:
Hashtable hashtable = GetHashtable();
for (int i = 0; i < hashtable.Count; i++)
{
MyStruct myStruct = (MyStruct)hashtable[i];
//more code
}
これをforeach
ループに変更すると:
var hashtable = GetHashtable();
foreach (var item in hashtable)
{
var myStruct = (MyStruct)item;
//more code
}
動作は同じだと思っていましたが、System.InvalidCastException: Specified cast is not valid.
この異なる動作の理由は何ですか?