【发布时间】:2016-03-22 19:06:07
【问题描述】:
我想过滤 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的返回类型应该是什么。 -
它应该是 IEnumerable
。但这是一个好点,如何告诉 OfType 方法!? -
OfType的返回类型与类型参数一致。
-
@Martinho Nit:它返回类型参数的 IEnumerable
标签: c# linq generics filter oftype