我有一个参数EntityCollection
的方法说:
DisplayItems(EntityCollection<Object> items);
为什么不能打电话?
EntityCollection<Student> students;
DisplayItems((EntityCollection<Object>) students); //type casting here
我怎样才能做到这一点?
请帮忙
答案 0 :(得分:1)
你的问题是因为Covariance and Contravariance而发生的,想象一下你想要它,你可以这样做:
public void DisplayItems(EntityCollection<Object> items)
{
//Probably not called add but you get the idea...
items.Add(new AnyObjectILike());
items.Add(new System.Windows.Form());
}
EntityCollection<Student> students;
DisplayItems((EntityCollection<Object>) students); //type casting here
清楚地向Student
添加非EntityCollection<Student>
类型的实例会导致一个大问题,这是不允许的原因之一,您可以使用{{1}更改接口的此行为}和In
个关键字。
答案 1 :(得分:-2)
类似的答案可以在这里找到:
convert or cast a List<t> to EntityCollection<T>
您需要单独循环并转换每个元素,并将它们添加到新的EntityCollection。
另一种选择是使用Cast()方法,但我不确定它是否适用于EntityCollection。它适用于List:
List<Object> myItems = students.Cast<Object>().ToList();
我无法检查这是否适用于EntityCollection但值得一试?