2011-05-02 36 views
2

我有一个对象(A类)实现接口I.铸造BindList中<Classname>到的BindingList <Interface>

我的对象C具有的BindingList listA的

在一个点上,我需要执行下面的转换:

BindingList<I> funcName(){ 
    ... 
    return (BindingList<I>) C.listA; 
} 

但是这不会因为转换错误而编译。

我该怎么去做呢?

+0

C.listA是什么类型? – 2011-05-02 20:32:37

+0

这是一个BindingList 。我会在问题 – karlipoppins 2011-05-02 20:33:27

回答

3

这是一个covariance问题。它已在.NET 4.0中解决,但并非针对所有枚举类型,我不认为它已针对BindingList <T>解决。

我认为你唯一的选择是如下创建的BindingList的新实例:

BindingList<I> funcName(){ 
    ... 
    return new BindingList<I>(C.listA); 
} 

或者,你可以声明你的C.listA字段作为的BindingList <我>,只是增加你的类实例到它。

+0

+1中纠正它。 .NET 4在接口和委托中引入协变和协变,但不在类上。 – StriplingWarrior 2011-05-02 20:42:45

+0

+1这些是我能看到的唯一解决方案。注意:BindingList 只需要一个IList 类型的构造函数,所以我认为你的意思是:return new BindingList (C.listA.OfType ().ToList()); (或类似) – 2011-05-02 20:44:00

+0

嗯,感谢您的链接,这非常有趣。然而,除了IList 之外,BindingList 将不会接受其构造函数中的任何其他内容。 – karlipoppins 2011-05-02 20:45:46