我想使用OfType <>来过滤List<ISeries>
中的对象。我的问题是,某些对象是通用接口类型,但它们没有自己的共同继承接口。
我有以下定义:如何使用OfType筛选泛型类型的所有变体<>
public interface ISeries
public interface ITraceSeries<T> : ISeries
public interface ITimedSeries : ISeries
//and some more...
我的列表中包含各种ISeries
,但现在我想只有ITraceSeries
对象,无论其实际定义泛型类型的参数,像这样:
var filteredList = myList.OfType<ITraceSeries<?>>(); //invalid argument!
我该怎么做?
一种不好使的解决办法是从ISeries
引入型ITraceSeries
继承:
public interface ITraceSeries<T> : ITraceSeries
然后,使用作为ITraceSeries
滤波器。但是这并没有真正增加新的信息,而只是让继承链变得更加复杂。
在我看来,这似乎是一个常见问题,但我没有在SO或网上找到有用的信息。感谢帮助!
想想'myList.OfType'的返回类型应该是什么。 – 2011-05-20 11:38:27
它应该是IEnumerable。但是这是一个好点,如何告诉OfType <>方法!? –
Marcel
2011-05-20 11:41:42
OfType的返回类型与类型参数相同。 – 2011-05-20 11:44:21