代码之家  ›  专栏  ›  技术社区  ›  Jimbo

c#联合运营商

  •  1
  • Jimbo  · 技术社区  · 15 年前


    我有三张数不清的单子- IEnumerable<Dog> , IEnumerable<Cat> IEnumerable<Horse>
    我要把它们放在一起 IEnumerable<NameColor>
    我有一个 public static explicit operator NameColor NameColor

    所以:

    IEnumerable<NameColor> list = dogs as IEnumerable<NameColor>;
    list = list.Union(cats as IEnumerable<NameColor>);
    list = list.Union(horses as IEnumerable<NameColor>);
    

    但是,这不起作用。我明白错误 Value cannot be null. Parameter name: first first 甚至是一种选择?!

    2 回复  |  直到 15 年前
        1
  •  1
  •   Marc Gravell    15 年前

    我建议:

    var list = dogs.Select(d => (NameColor)d)
                   .Union(cats.Select(c => (NameColor)c))
                   .Union(horses.Select(h => (NameColor)h));
    
        2
  •  3
  •   Jon Skeet    15 年前

    first Enumerable.Union . 它抛出了一个异常,因为 as 操作员的结果是 null .

    Dog 意思是你可以治疗 IEnumerable<Dog> IEnumerable<NameColor> . 使用 Select

    实际上有两个原因导致转换不起作用:

    • 无论如何都不应用转换,因此如果应用转换:

      NameColor nameColor = dog as NameColor;
      

      nameColor 为空。

    • 只是因为 要素 收集 类型本身。泛型方差只适用于引用类型转换,它们是