gpt4 book ai didi

c# - 在 C#/LINQ 中用匿名方法替换常规方法

转载 作者:太空狗 更新时间:2023-10-29 18:26:07 24 4
gpt4 key购买 nike

我有一个如下所示的 LINQ 查询:

public IEnumerable<Foo> SelectFooBars()
{
return
from
f in foos
join
b in bars
on f.BarId equals b.Id
select
AddMissingProp(f, b.MissingProp);
}

public void AddMissingProp(Foo foo, string missingProp) // substitute this with inline lambda
{
foo.MissingProp = missingProp;
return foo;
}

我想摆脱 AddMissingProp 并在我的 select 子句中使用某种形式的 lambda。

我试过...

...
select
(f, b) => { f.MissingProp = b.MissingProp; return f }

...但我收到以下错误:

A local variable named 'f' cannot be declared in this scope because it would give a different meaning to 'f', which is already used in a 'parent or current' scope to denote something else.

如何“lambda 化”我的查询?


更新

这也行不通:

...
select
() => { f.MissingProp = b.MissingProp; return f }

我收到以下错误:

The type of one of the expressions in the join clause is incorrect. Type inference failed in the call to 'Join'.

我根本没有更改 join 子句,所以我很困惑。

最佳答案

我认为 icambron 是对的,恕我直言,可读性更好的版本是这样的:

  var fooBar = from 
f in foos
join
b in bars
on f.BarId equals b.Id
select new {f,b};

foreach(var x in fooBar)
x.f.MissingProp = x.b.MissingProp;

// EDIT due to comments: add this if you
// need IEnumerable<Foo> returned
return fooBar.Select(fb => fb.f);

from join select 语句用于查询,不应滥用它们来改变序列的内容。

编辑:这是另一个 link提供一些见解,说明为什么使用函数形式的 ForEach 不是一个好主意。

关于c# - 在 C#/LINQ 中用匿名方法替换常规方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2023218/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com