C# 从lambda表达式内的函数调用获取返回值
考虑以下C#线: 但是两次调用同一个函数似乎有点低效。。。只需一次调用就可以得到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
结果吗?您可以使用它(假设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;