2008年09月08日

Listかどうかを調べる

   このエントリーをはてなブックマークに追加 Clip to Evernote
今度は、ある型が、Listのオブジェクトだということを判断するコードをC#で書いてみる。 配列の場合は、Type.IsArray プロパティが用意されているけど、 IsListはさすがに用意されていない。 最初に書いたコードは以下の通り。

 void IsList(Type type) {
    return type.Name == "List`1" &&
           type.Namespace == "System.Collections.Generic";
 }

なんか、イケてない。
次は、試行錯誤でたどり着いたコード。

 return type.GetGenericTypeDefinition() == typeof(List<>);

このほうが良いな。
そのオブジェクトが取得できるならば、

   obj is List<int>

のようにすれば、通常は問題ない。 でも、要素の型が分からない場合は、
   obj is List<>  // コンパイルエラー

とは書けない。残念だ。
じゃあ、要素の型を見つけるにはどうするのだろうか? 調べたところ、以下のコードで見つけられた。
 Type elementType = type.GetGenericArguments()[0];


この記事へのコメント
GJ!!

いや、リアルにリフレクション使ってたものですから^^;
Posted by R・田中一郎 at 2008年09月11日 12:48
> GJ!!

どうもです (^^/
リフレクションって面白いですよね。
Posted by gushwell at 2008年09月11日 21:20
 

この記事へのトラックバックURL

http://trackback.blogsys.jp/livedoor/gushwell/51621926