2011-01-29 44 views
3

可能重复:
Lambda Expression: == vs. .Equals()使用equals关键字在LINQ

嗨,

我用了很多关键字等于比较变量和其他的东西。

wines = wines.Where(d => d.Region.Equals(paramRegion)).ToList(); 

在运行时返回一个错误时,在数据区域为NULL

我不得不使用代码

wines = wines.Where(d => d.Region == paramRegion).ToList(); 

摆脱错误的。

任何想法为什么会引发错误?

谢谢。

+1

`Equals`在这种情况下是不是一个关键字 - 它仅仅是一个方法。 **有一个LINQ上下文的`equals`关键字,但只有在执行`join'时。 – 2011-01-29 14:53:23

+0

这个问题已经被应答之前: http://stackoverflow.com/questions/2273600/lambda-expression-vs-equals – Victor 2011-01-29 14:53:38

回答

3

您无法使用空对象引用调用实例方法。在调用实例方法之前,应该检查Region是否为空。

wines = wines.Where(d => d.Region != null && d.Region.Equals(paramRegion)).ToList(); 

d.Region == paramRegion是(最有可能)扩大到object.Equals(d.Region, paramRegion)和静态方法并检查参数是否为空或不调用equals()方法之前。

如果您知道paramRegion不能为空,您也可以按不同顺序编写条件。

Debug.Assert(paramRegion != null); 
wines = wines.Where(d => paramRegion.Equals(d.Region)).ToList(); 
3

基本上如果

d.Region == null 

那么任何方法调用,这里是的equals(...)上,将引发异常,因为它未初始化。

0

使用可以使用:

paramRegion.Equals(d.Region)