组合两个不同类型的序列
本文关键字:同类型 两个 组合 | 更新日期: 2023-09-27 18:19:06
我有两个类是这样定义的:
class Foo
{
public string name {get; set;}
public long number {get; set;}
}
class Bar
{
//some properties
public string otherName {get; set;}
public long otherNumber {get; set;}
}
如何将这两种类型的两个IEnumerable
序列组合到一个新的匿名类型中,该匿名类型由两个类的属性组合组成。
例:
Foo:
name1 - number1
name2 - number2
name3 - number3
Bar:
otherName1 - otherNumber1
OtherName2 - otherNumber2
Desired Result:
name1 - number1
name2 - number2
name3 - number3
otherName1 - otherNumber1
OtherName2 - otherNumber2
我尝试Zip
linq 中的函数,但没有运气。
使用这个:
var result = efoo.Select(x => new { x = x.name, y = x.number })
.Concat(ebar.Select(x => new { x = x.otherName, y = x.otherNumber }));
result
是具有 x
、 y
作为属性的匿名类型的可枚举。您可以使用正常的foreach
循环循环遍历此序列:
foreach (var i in result)
{
string name = i.x;
long number = i.y;
}
我不知道
连接的意义是什么,或者以后的用法将如何。你可以把它投射到IEnumerable<object>
,然后做一个Concat
,像这样:
var result = foos.Cast<object>().Concat(bars.Cast<object>());
理想的方法是可以具有通用的基类或接口,并使用它来代替object
。
var result = FooList.Select(t=> new { a = t.name, b = t.number})
.Concat(
BarList.Select(t => new { a = t.othername, b = t.othernumber}));
如果要"合并"结果,请使用 Union 而不是 Concat -- 但在这种情况下,您将需要一个元素类型的 Compare 函数。