gpt4 book ai didi

c# - 仅使用扩展方法在 Linq 中进行漂亮、干净的交叉连接

转载 作者:可可西里 更新时间:2023-11-01 03:04:08 27 4
gpt4 key购买 nike

<分区>

Possible Duplicate:
Nested “from” LINQ query expressed with extension methods

我确定之前有人问过这个问题,但老实说我找不到任何东西。

我很好奇以下仅使用内置 Linq 扩展方法的等效语法是什么:

var z1 =
from x in xs
from y in ys
select new { x, y };

我可以得到相同的结果:

var z2 = xs.SelectMany(x => ys.Select(y => new { x, y }));

但是会产生不同的IL代码,而且代码有点绕口难懂。有没有更简洁的方法来使用扩展方法来做到这一点?


这是我编写的整个测试方法:

private void Test()
{
var xs = new[] { 1D, 2D, 3D };
var ys = new[] { 4D, 5D, 6D };

var z1 =
from x in xs
from y in ys
select new { x, y };

var z2 = xs.SelectMany(x => ys.Select(y => new { x, y }));
}

这里是[编辑:C# interp] IL 代码(使用 ILSpy):

private void Test()
{
double[] xs = new double[]
{
1.0,
2.0,
3.0
};
double[] ys = new double[]
{
4.0,
5.0,
6.0
};
var z =
from x in xs
from y in ys
select new
{
x = x,
y = y
};
var z2 = xs.SelectMany((double x) =>
from y in ys
select new
{
x = x,
y = y
});
}

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