组合两个不同类型的序列

本文关键字:同类型 两个 组合 | 更新日期: 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 是具有 xy 作为属性的匿名类型的可枚举。您可以使用正常的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 函数。