这是我今天遇到的一个问题。
我在C#中有一个声明
EmPayRollData emPayRollData = payroll.EmPayRollDatas.First();
payroll和EmPayRollData都是实体。即工资单是父项,EmPayRollData是子项。
现在我有一个声明:
companyRow.CompanyName = (empowerPayRollData == null) ? string.Empty : empowerPayRollData.Name;
我得到一个resharper评论说:“表达总是假的”
答案 0 :(得分:5)
如果payroll.EmPayRollDatas
可能为空,则应改为使用:
payroll.EmPayRollDatas.FirstOrDefault()
在空枚举的情况下将返回null。 First
会在这种情况下抛出异常,因此如果到达了您正在质疑的代码行,则序列不为空,并且您的变量不能为空。
答案 1 :(得分:5)
这是因为First()
将返回一个对象,如果不能则抛出异常。 Resharper知道如果你到达那一行,那么empowerPayRollData将不为null。在这种情况下,您可以考虑使用FirstOrDefault
。
答案 2 :(得分:1)
Resharper可能知道.First()
将导致非null或异常。
由此可以推断出表达式总是假的。
如果您希望空结果集,请使用.FirstOrDefault()