繁体   English   中英

铸造收藏<interface>

[英]Casting to Collection<interface>

有了这个:

public class Widget : IWidget {}

为什么在这里collection2 == null

var collection1 = collectionView.SourceCollection as ObservableCollection<Widget>;
var collection2 = collectionView.SourceCollection as ObservableCollection<IWidget>;

其中SourceCollection is ObservableCollection<Widget>

如果将集合声明为ObservableCollection<Widget> ,则不能将其ObservableCollection<IWidget>ObservableCollection<IWidget> 我相信这在.NET 4中是可行的,但在3.5或更低版本中是不可能的 -更正-请参阅下面的亚当评论。

为了使上述工作正常进行,您必须将列表声明为ObservableCollection<IWidget>然后两个强制转换都将起作用。 无论如何,您应该始终使用接口类型。

顺便说一句,当您使用'as'关键字时,这称为安全转换。 如果无法进行强制转换,它将返回null。 显式强制转换...即(ObservableCollection<IWidget>) collectionView.SourceCollection如果无法强制转换将抛出异常。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM