我想做这个
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更好地描述出什么问题。