强制转换为集合接口

本文关键字:集合 接口 转换 | 更新日期: 2023-09-27 18:09:41

加上这个:

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>我相信这在。net 4中是可能的,但在3.5或更低版本中是不可能的 -更正-参考下面Adam的评论。

要使上述工作,必须将列表声明为ObservableCollection<IWidget>,然后两个强制转换都将工作。无论如何,你都应该尽可能地使用接口类型。

当你使用' As '关键字时,这被称为安全强制转换。如果不可能强制转换,它将返回null。显式强制转换…如(ObservableCollection<IWidget>) collectionView.SourceCollection将抛出异常,如果强制转换是不可能的。