2009-03-09 9 views
6

私はこれらのうちの1つを他のものよりも選択すべき理由はありますか?それとも本当に問題なのですか?Linq2Sql:HasValueと!= nullはnull可能な型に対して同じ働きをしますか?

var a = data.Cars.Where(ø => ø.LicensePlate != null); 

var b = data.Cars.Where(ø => ø.LicensePlate.HasValue); 

私は前に!= null使用されるが、hasValueはは一種の良く読み以来、私は多分に切り替えるべきだと思い始めています。皆さんはどう思いますか?違いはありますか? 1文字余分以外は?パフォーマンスの違いは? SQLの違いは?

+3

Iは、コード内の識別子としてノルウェーOを使用することを好みます。 :) – KristoferA

+0

@ KristoferA-Huagati.com私も、他のものが来るのを自動補完するのを防ぎます。 'x'は通常これでもうまくいきますが、私は'ø'や何か他のもののためにその文字で始まるものは使用しません:) – Svish

答えて

12

いいえ、両方のステートメントが同じで、どちらかがわかりやすいものを選択する必要があります。

興味深いことに、コンパイラはの比較をNullable<T>に置き換え、HasValueを呼び出します。

class Program 
{ 
    static void Main() 
    { 
     int? i = 0; 

     Console.WriteLine(i != null); 
     Console.WriteLine(i.HasValue); 
    } 
} 

これにコンパイルされる:すなわちこの内

private static void Main() 
{ 
    int? i = 0; 
    Console.WriteLine(i.HasValue); 
    Console.WriteLine(i.HasValue); 
} 
+1

nice!そんなコンパイルの結果はどうやって見えますか? – Svish

+1

私はリフレクターを使ってアセンブリを分析しました - http://www.red-gate.com/products/reflector/ –

関連する問題