gpt4 book ai didi

c# - 有没有办法在 C# 中使用 LINQ 将两个值选择到同一个 IEnumerable 中?

转载 作者:太空狗 更新时间:2023-10-29 23:58:06 25 4
gpt4 key购买 nike

我有一个包含两个整数的类,例如 AB :

public class MyClass {
public int A { get; set; }
public int B { get; set; }
...other stuff...
}

我有一个 MyCollection类型 ObservableCollection<MyClass>在代码中,并且需要获得 IEnumerable<int>所有值中的 - 都是 A的和B的 -- 在一个列表中。

我已经想出如何使用非常冗长的代码来做到这一点(出于示例目的,显着简化为仅低于一级,但实际上是 3 级“from”调用并从嵌套列表中选择值):

IEnumerable<int> intsA=
(from x in MyCollection
select x.A);
IEnumerable<int> intsB =
(from x in MyCollection
select x.B);
IEnumerable<int> allInts = intsA.Concat(intsB);

似乎应该有一种方法可以同时将两个变量选择到同一个 IEnumerable<int> 中。 .显然下面是行不通的,但我喜欢

IEnumerable<int> allInts = (from x in MyCollection select x.A, x.B);

是否存在比我上面的更优雅的东西?

我找到了如何将多个值选择为匿名类型 here ,但这并没有使它成为同一个 IEnumerable 并且仍然需要更多的代码/处理来取出项目。

(顺便说一句,使用 .NET 4.5.1,如果这有所不同。)谢谢!

最佳答案

你可以使用 SelectMany :

var result = source.SelectMany(x => new[] { x.A, x.B });

但是因为你会为每个对象分配一个新数组,所以我不知道它的性能如何(或者你可能不太关心它)。

你可以声明GetIntValues在你的类型上会返回 IEnumerable<int> :

public class MyClass {
public int A { get; set; }
public int B { get; set; }
...other stuff...

public IEnumerable<int> GetIntValues()
{
yield return A;
yield return B;
}
}

然后像这样使用它:

var result = source.SelectMany(x => x.GetIntValues());

但是每个元素还是要额外分配的。

关于c# - 有没有办法在 C# 中使用 LINQ 将两个值选择到同一个 IEnumerable 中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28908087/

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