C# 写这个lambda表达式的更好方法?
我正在尝试编写一个lambda表达式,用于查看对象数组(“字段”),其中可能包含也可能不包含特定项。我想检索存在的值;如果数组中没有字段的代码为“SomeCode”,则没有要检索的值。我很好奇是否有一种更简洁的方法来写下面的内容,因为我需要对许多字段执行此操作,并且我确实希望两次运行'FirstOrDefault'调用C# 写这个lambda表达式的更好方法?,c#,linq,lambda,C#,Linq,Lambda,我正在尝试编写一个lambda表达式,用于查看对象数组(“字段”),其中可能包含也可能不包含特定项。我想检索存在的值;如果数组中没有字段的代码为“SomeCode”,则没有要检索的值。我很好奇是否有一种更简洁的方法来写下面的内容,因为我需要对许多字段执行此操作,并且我确实希望两次运行'FirstOrDefault'调用 if (fields.FirstOrDefault(x => x.Code == "SomeCode") != null) { obj.CodeValue = f
if (fields.FirstOrDefault(x => x.Code == "SomeCode") != null)
{
obj.CodeValue = fields.FirstOrDefault(x => x.Code == "SomeCode").Value;
}
编辑:感谢您以“仅限Lambda”的方式对此进行深入了解;我想提高我在这方面的技能,并认为有比两次调用它或简单地将其分配给临时对象更干净的方法。只需缓存来自
FirstOrDefault
的返回值,然后进行比较即可
var item = fields.FirstOrDefault(x => x.Code == "SomeCode");
if (item != null)
{
obj.CodeValue = item.Value;
}
在当前代码中,您将查询两次,一次用于检查null
,稍后用于访问值 试试这个:
var field = fields.FirstOrDefault(x => x.Code == "SomeCode");
if (field != null)
obj.CodeValue = field.Value;
如果没有匹配项,是否要设置
obj.CodeValue
?这样做有害吗?如果您只需要一个值,那么使用SingleOrDefault
@JonSkeet也可能有意义-如果该值最终可为空,则可能(有害)。谢谢你,布拉德-打得好;谢谢,因为我最多只期望一个值;我想可能有一个“lambda唯一的解决方案”。谢谢。@EvConrad,我不知道你所说的“仅限Lamda”解决方案是什么意思,但在你当前的代码中,你要查询两次,答案中的代码将查询一次。