将基类集合转换为派生类的集合

时间:2012-09-21 13:30:52

标签: c#

你能帮我把BaseClass的ObservableCollection转换成DerivedClass的IEnumerable吗?

感谢。

2 个答案:

答案 0 :(得分:3)

如果您知道所有项都是派生对象,那么请使用LINQ的Enumerable.Cast

var enumerable = collection.Cast<DerivedClass>();

如果集合中的任何项目实际上不是DerivedClass,则会抛出上述内容。

如果集合可能包含非派生对象,并且您只需要派生的对象:

var enumerable = collection.OfType<DerivedClass>();

答案 1 :(得分:1)

如果您确定所有项目实际上都是派生类型,请使用Cast

IEnumerable<DerivedClass> results = observableCollection.Cast<DerivedClass>();

如果有些可能不属于那种类型,请使用

IEnumerable<DerivedClass> results = observableCollection.OfType<DerivedClass>();
如果无法投放任何项目,

Cast将抛出异常,OfType将不会将其包含在结果中。