箱庭ハーブblog

7年目プログラマの趣味の小部屋

List<T>、配列、IEnumerableとキャスト

Array、IEnumerable<T>、Linq

ども。

C#では、配列とList<T>ではキャストの挙動が違います。
object[] a = new Type[0]; // OK
List<object> b = new List<Type>(); // NG

List<T>の要素型をアップキャストできないんですね。
ちなみに、IEnumerable<T>は明示的なキャストで可能ですが、
実体が配列だった時だけ成功して、List<T>だった場合は例外が発生します。

で、どうしてもキャストしたい場合は、シャロウコピーなりなんなりするわけですが、
System.LinqのCast<T>()でシャロウコピーできます。
List<object> b = (new List<Type>()).Cast<object>(); // OK
このCast<T>()、配列ならキャスト、それ以外ならシャロウコピーします。
コメント
PAGETOPへ

コメント送信

お名前
タイトル
文字色
メールアドレス
URL
コメント
パスワード

パスワードを入れておかないと、コメントの再編集ができません!

フリーエリア

takemori
Twitter : @takemori_kondo

1. Unityと戯れてます
2. Cake3は劣化じゃないRails

iOS
coming soon...

Windows
Html Editor - Nazuna
Managed DirectX サンプル集

beginning since
2006.08.17
renewaled on
2011.06.03

最新コメント

[2013/06/14 ミューネ]
[2012/08/30 ノートPC]