5

可能重复:
Lambda 表达式:== vs. .Equals()

你好,

我经常使用关键字 Equals 来比较变量和其他内容。

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

当数据区域为 NULL 时在运行时返回错误

我不得不使用代码

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

摆脱错误。

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

谢谢。

4

3 回答 3

5

您不能调用具有空对象引用的实例方法。在调用其实例方法之前,您应该检查 Region 不为空。

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

在调用 Equals() 方法之前,d.Region == paramRegion它(最有可能)扩展为object.Equals(d.Region, paramRegion)并且该静态方法确实检查参数是否为空。

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

Debug.Assert(paramRegion != null);
wines = wines.Where(d => paramRegion.Equals(d.Region)).ToList();
于 2011-01-29T14:27:18.327 回答
3

基本上如果

d.Region == null

然后任何方法调用,这里的Equals(...)都会引发异常,因为它没有被初始化。

于 2011-01-29T14:27:28.427 回答
0

使用可以使用:

paramRegion.Equals(d.Region)
于 2011-01-29T14:35:49.610 回答