I持って(型オブジェクトの)値をとり、そうのようにint型とするuintのIEnumerableをにキャストしようとするいくつかのコード:IEnumerable <T>として値をキャストするのは、値をどのように初期化したかによって異なるのですか?
uint number = 1;
object value = new []{ number };
:値がこのように初期化され
var idList = value as IEnumerable<int>;
var uintList = value as IEnumerable<uint>;
idListとuintListの両方に値がありますが、idList.ToList()を呼び出すとArrayTypeMismatchException
になります。ただし、値がnew List<uint>{ number }
で生成される場合、idListは期待どおりにnullです。
さらに、VS2015の直下のウィンドウでvar idList = value as IEnumerable<int>;
を呼び出すと、値がコレクション初期化子で生成された場合でも、期待通りにnullが返されます。
.Net fiddle reproducing the error here。
ここでは何が起こっていますか?
このスタックオーバーフローポストを見てください:http://stackoverflow.com/questions/7173266/casting-array-to-ienumerablet – DHP
'value'を初期化しておけば' var idList = value私は実行時例外ではなくコンパイルエラーを返します。 –
ここではコンパイルエラーはありませんが、コードパスを単純化する際に、値がキャストされる前にオブジェクト型にキャストされていたことがわかりました。 IEnumerableに戻る。それに応じて質問に追加します。ありがとうございます。 – RSid