通用集合中的协方差



我想做这个

List<anotherclass> ls = new List<anotherclass> {new anotherclass{Name = "me"}};    
myGrid.ItemSource = ls;

在其他地方

var d = myGrid.ItemSource as IEnumerable<Object>;    
var e = d as ICollection<dynamic>;
e.Add(new anotherclass());

我需要在程序的不同领域访问项目资源。我需要在不编译时间类型信息的情况下将项目添加到列表中。铸造到Ienumerable的作品中,但是由于我需要在集合中添加项目,所以我不仅需要将其施放到集合中。

怎么可能?

List<T>实现IList。因此,只要您确定要添加正确的对象类型,就可以使用此接口的Add方法:

var d = (IList)myGrid.ItemSource;        
d.Add(new anotherclass());

问题不是:"为什么起作用?",因为实际上它不起作用。它编译,但会抛出NullReferenceException
d as ICollection<dynamic>将返回null,因为List<anotherclass>不是ICollection<dynamic>,但是ICollection<anotherclass>ICollection<T>不是协变量。

该解决方案已经由Kookiz提供。

尝试一下:

var d =(List<anotherclass>) myGrid.ItemSource;
d.Add(new anotherclass());

我认为最好进行直接演员。如果您使用的话,它将在尝试添加时会引发NullReferenceException。最好让无效的castexception更好地描述出什么问题。

相关内容

  • 没有找到相关文章

最新更新