我想使用OfType 使用类型来过滤List<ISeries>中的对象。 我的问题是,某些对象属于通用接口(interface)类型,但是它们没有自己的公共(public)继承接口(interface)。我有以下定义:public interface ISeriespublic interface ITraceSeries<T> : ISeriespublic interface ITimedSeries : ISeries//and some more...我的列表包含各种ISeries,但是现在我只想获取ITraceSeries对象,而不管它们实际定义的通用类型参数如何,如下所示:var filteredList = myList.OfType<ITraceSeries<?>>(); //invalid argument! 我该怎么做? 一个不利的解决方案是引入从ITraceSeries继承的ISeries类型:public interface ITraceSeries<T> : ITraceSeries然后,使用ITraceSeries作为过滤器。但这并没有真正添加新信息,而只是使继承链更加复杂。在我看来,这似乎是一个常见的问题,但是我没有在SO或Web上找到有用的信息。感谢帮助! (adsbygoogle = window.adsbygoogle || []).push({}); 最佳答案 您可以使用反射来实现它:var filteredList = myList.Where( x => x.GetType() .GetInterfaces() .Any(i => i.IsGenericType && (i.GetGenericTypeDefinition() == typeof(ITraceSeries<>)))); (adsbygoogle = window.adsbygoogle || []).push({});
10-01 08:01