gpt4 book ai didi

c# 联合运算符

转载 作者:太空宇宙 更新时间:2023-11-03 22:18:29 25 4
gpt4 key购买 nike

场景
我有三个 IEnumerable 列表 - IEnumerable<Dog> , IEnumerable<Cat>IEnumerable<Horse> .
我希望它们合而为一 IEnumerable<NameColor> .
我有一个 public static explicit operator NameColor在每个 Dog、Cat 和 Horse 对象上定义,以允许我将它们转换为 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 的参数甚至是一种选择?!

最佳答案

firstEnumerable.Union 的隐式“this”参数.它抛出异常,因为 as运算符的结果是 null .

基本上,问题是有一个 Dog 的转换运算符并不意味着您可以处理 IEnumerable<Dog>作为IEnumerable<NameColor> .使用 Select相反,基本上。

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

  • as无论如何都不会应用转换,所以如果您这样做:

    NameColor nameColor = dog as NameColor;

    那仍然会留下 nameColor为空。

  • 元素 类型之间存在转换并不意味着转换应用于集合 类型本身。通用方差仅适用于引用类型转换,保留表示

关于c# 联合运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4132272/

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