gpt4 book ai didi

c# - IEnumerable 转换

转载 作者:太空狗 更新时间:2023-10-29 22:21:02 25 4
gpt4 key购买 nike

鉴于以下情况:


class Base<T> {/*...*/}
class Der<T>: Base<T> {/*...*/}

interface Sth<T>{
IEnumerable<Base<T>> Foo {get;}
}

// and implementation...
class Impl<T>: Sth<T> {
public IEnumerable<Base<T>> Foo {
get {
return new List<Der<T>>();
}
}
}

我怎样才能编译它?显然,错误不是从 List > 到 List > 的隐式转换。如果我显式转换它,则会发生 InvalidCastException。

最佳答案

自 .NET Framework 3.5 版起,您尝试进行的转换不受支持。由于添加了 generic covariance/contravariance,它将在 4.0 版 (Visual Studio 2010) 中得到支持.虽然这仍然不允许您转换 List<Der>List<Base> ,它允许你施放IEnumerator<Der> (列表实现)到 IEnumerator<Base> .

与此同时,您可以编写自己的类来实现 IEnumerable<Base>并返回自定义 IEnumerator<Base>简单地包装 List<Der>IEnumerator<Der> .或者,如果您使用的是 .NET Framework 3.5 版,则可以使用 Cast extension method ,正如其他人所建议的那样。

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

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