鉴于以下内容:
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>>();
}
}
}
Run Code Online (Sandbox Code Playgroud)
我该如何编译?显然,错误不是从List <Der <T >>到List <Base <T >>的隐式转换.如果我显式地强制转换它会发生InvalidCastException.
从.NET Framework 3.5版开始,不支持您尝试进行的转换.由于增加了通用的协方差/逆变,它将在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扩展方法.
归档时间: |
|
查看次数: |
2284 次 |
最近记录: |