Linq2Sql:HasValue和!= null,对可空类型的工作方式是否相同?

时间:2009-03-09 10:37:18

标签: c# linq-to-sql

我有什么理由选择其中一种而不是另一种吗?或者这不重要吗?

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

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

之前我曾使用!= null,但开始认为我应该切换,因为HasValue类型读取更好。你们有什么感想?有什么不同吗?除了一个角色以外?任何性能差异? Sql差异?

1 个答案:

答案 0 :(得分:12)

不,两个陈述都是一样的,你应该选择你认为更具可读性的陈述。

值得注意的是,编译器会通过调用null替换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);
}