表达总是错误的

时间:2011-04-14 21:04:42

标签: c#

这是我今天遇到的一个问题。

我在C#中有一个声明

 EmPayRollData emPayRollData = payroll.EmPayRollDatas.First();

payroll和EmPayRollData都是实体。即工资单是父项,EmPayRollData是子项。

现在我有一个声明:

companyRow.CompanyName = (empowerPayRollData == null) ? string.Empty : empowerPayRollData.Name;

我得到一个resharper评论说:“表达总是假的”

3 个答案:

答案 0 :(得分:5)

如果payroll.EmPayRollDatas可能为空,则应改为使用:

payroll.EmPayRollDatas.FirstOrDefault()

在空枚举的情况下将返回null。 First会在这种情况下抛出异常,因此如果到达了您正在质疑的代码行,则序列不为空,并且您的变量不能为空。

答案 1 :(得分:5)

这是因为First()将返回一个对象,如果不能则抛出异常。 Resharper知道如果你到达那一行,那么empowerPayRollData将不为null。在这种情况下,您可以考虑使用FirstOrDefault

答案 2 :(得分:1)

Resharper可能知道.First()将导致非null或异常。

由此可以推断出表达式总是假的。

如果您希望空结果集,请使用.FirstOrDefault()