gpt4 book ai didi

c# - 从 IEnumerable 转换为 IEnumerable
转载 作者:太空狗 更新时间:2023-10-29 20:48:09 25 4
gpt4 key购买 nike

最近我在 c# 中发现了一个非常令人惊讶的行为。我有一个方法需要 IEnumerable<Object>作为参数,我正在传递 IEnumerable<string>但这是不可能的。虽然在 C# 中一切都可以向上转换为对象,但为什么这是不可能的?这让我很困惑。请有人在这个问题上澄清我。

最佳答案

对此的技术术语是泛型在 C# 3.0 及更早版本中是不变的。从 C#4.0 开始,强制转换有效。

不变的意思是两个泛型之间没有关系,只是因为它们的泛型参数是相关的(即是彼此的子类型或父类(super class)型)。

在您的示例中,IEnumerable<object> 之间没有类型关系和一个 IEnumerable<string> ,只是因为字符串是对象的子类型。它们只是被认为是两种完全不相关的类型,例如字符串和整数(它们仍然都是对象的子类型,但一切都是)

对于您遇到的这个问题,有一些解决方法和异常(exception)情况。

首先,您可以将每个字符串单独转换为对象,如果您使用的是 .NET 3.0,则可以使用 Cast<T>()扩展方法。否则,您可以使用 foreach 并将结果放入您想要的静态类型的新变量中。

其次,数组是引用类型的一个异常(exception),即将字符串[] 类型传递给接受对象[] 类型的方法应该可行。

关于c# - 从 IEnumerable<Object> 转换为 IEnumerable<string>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/609608/

25 4 0