2008年06月04日

ジェネリックの型引数の値はnullと比較できる

   このエントリーをはてなブックマークに追加 Clip to Evernote
private void Hoge<T>(T param) {
if ( param != null )
Console.WriteLine("is null");
}


というコードの場合、型引数Tは、値型の場合もあるし、参照型の場合もある。
通常、値型の変数と null を比較することはできないのでコンパイルエラーとなるけど、ジェネリックスの場合は、コンパイルエラーとはならない。
値型の場合は、( param != null )は、無条件に trueになる。そのため、値型の場合は、JITコンパイラーが、最適化してくれて、

    if ( param != null )
Console.WriteLine("is null");


そのもののコードを生成しないようになっているらしい。
なるほどね。


この記事へのコメント
>値型の場合は、( param == null )は、無条件に trueになる
false ?
Posted by BLUEPIXY at 2008年06月05日 01:48
BLUEPIXY さん、

あわわわ。間違えてますね。orz...
修正しておきます。
どうもありがとうございます。
Posted by Gushwell at 2008年06月05日 08:08
 

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

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