Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/269.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 - Fatal编程技术网

C# 从lambda表达式内的函数调用获取返回值

C# 从lambda表达式内的函数调用获取返回值,c#,linq,C#,Linq,考虑以下C#线: 但是两次调用同一个函数似乎有点低效。。。只需一次调用就可以得到结果吗?您可以使用它(假设GetResult返回int): int?结果=空; var item=listOfItems.FirstOrDefault(x=>(result=GetResult(x))您可以选择匿名类型的项和调用该项的GetResult的结果,如下所示: var itemAndResult = listOfItems .Select(x => new {Item = x, Result

考虑以下C#线:

但是两次调用同一个函数似乎有点低效。。。只需一次调用就可以得到
结果吗?

您可以使用它(假设
GetResult
返回
int
):

int?结果=空;

var item=listOfItems.FirstOrDefault(x=>(result=GetResult(x))您可以选择匿名类型的项和调用该项的
GetResult
的结果,如下所示:

var itemAndResult = listOfItems
    .Select(x => new {Item = x, Result = GetResult(x)})
    .Where(a => a.Result <= upperLimit)
    .FirstOrDefault();

var item = itemAndResult.Item;
var result = itemAndResult.Result;
var itemAndResult=ListoItems
.Select(x=>new{Item=x,Result=GetResult(x)})

.Where(a=>a.Result)尝试以下操作:var item=listOfItems.Where(i=>GetResult(i)GetResult(j)).FirstOrDefault()@jdweng根据生成的IL,这看起来仍然会调用两次
GetResult
。@colmde根据
GetResult
的成本,您最大的问题可能不是为匹配调用两次
GetResult
,而是为任何不匹配的东西调用它。@DavidL-当它会找到第一个匹配项?Linq并不总是有效的,所以如果您真的想要优化代码,就不要使用Linq。
var item = listOfItems.FirstOrDefault(i => GetResult(i) <= upperLimit);
var result = GetResult(item);
int? result = null;
var item = listOfItems.FirstOrDefault(x => (result = GetResult(x)) <= upperLimit);
var itemAndResult = listOfItems
    .Select(x => new {Item = x, Result = GetResult(x)})
    .Where(a => a.Result <= upperLimit)
    .FirstOrDefault();

var item = itemAndResult.Item;
var result = itemAndResult.Result;