Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/300.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 写这个lambda表达式的更好方法?_C#_Linq_Lambda - Fatal编程技术网

C# 写这个lambda表达式的更好方法?

C# 写这个lambda表达式的更好方法?,c#,linq,lambda,C#,Linq,Lambda,我正在尝试编写一个lambda表达式,用于查看对象数组(“字段”),其中可能包含也可能不包含特定项。我想检索存在的值;如果数组中没有字段的代码为“SomeCode”,则没有要检索的值。我很好奇是否有一种更简洁的方法来写下面的内容,因为我需要对许多字段执行此操作,并且我确实希望两次运行'FirstOrDefault'调用 if (fields.FirstOrDefault(x => x.Code == "SomeCode") != null) { obj.CodeValue = f

我正在尝试编写一个lambda表达式,用于查看对象数组(“字段”),其中可能包含也可能不包含特定项。我想检索存在的值;如果数组中没有字段的代码为“SomeCode”,则没有要检索的值。我很好奇是否有一种更简洁的方法来写下面的内容,因为我需要对许多字段执行此操作,并且我确实希望两次运行'FirstOrDefault'调用

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”解决方案是什么意思,但在你当前的代码中,你要查询两次,答案中的代码将查询一次。