我有一个对象(A类)实现接口I.铸造BindList中<Classname>到的BindingList <Interface>
我的对象C具有的BindingList listA的
在一个点上,我需要执行下面的转换:
BindingList<I> funcName(){
...
return (BindingList<I>) C.listA;
}
但是这不会因为转换错误而编译。
我该怎么去做呢?
我有一个对象(A类)实现接口I.铸造BindList中<Classname>到的BindingList <Interface>
我的对象C具有的BindingList listA的
在一个点上,我需要执行下面的转换:
BindingList<I> funcName(){
...
return (BindingList<I>) C.listA;
}
但是这不会因为转换错误而编译。
我该怎么去做呢?
这是一个covariance问题。它已在.NET 4.0中解决,但并非针对所有枚举类型,我不认为它已针对BindingList <T>解决。
我认为你唯一的选择是如下创建的BindingList的新实例:
BindingList<I> funcName(){
...
return new BindingList<I>(C.listA);
}
或者,你可以声明你的C.listA字段作为的BindingList <我>,只是增加你的类实例到它。
+1中纠正它。 .NET 4在接口和委托中引入协变和协变,但不在类上。 – StriplingWarrior 2011-05-02 20:42:45
+1这些是我能看到的唯一解决方案。注意:BindingList 只需要一个IList 类型的构造函数,所以我认为你的意思是:return new BindingList (C.listA.OfType ().ToList()); (或类似) – 2011-05-02 20:44:00
嗯,感谢您的链接,这非常有趣。然而,除了IList 之外,BindingList 将不会接受其构造函数中的任何其他内容。 – karlipoppins 2011-05-02 20:45:46
C.listA是什么类型? – 2011-05-02 20:32:37
这是一个BindingList 。我会在问题 – karlipoppins 2011-05-02 20:33:27