[英]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.