作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我有一个包含两个整数的类,例如 A
和 B
:
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/
我是一名优秀的程序员,十分优秀!