如果我在 .NET 4 库中有这个内部方法(在这里运行在 Mono 上):
protected internal IEnumerable<KSComponent> GetComponentsByType(Type componentType)
{
return this.componentsDic [componentType];
}
我想用一个通用参数来公开它以方便使用。这是我到目前为止所做的并且正在工作的内容:
public IEnumerable<TComponentType> GetComponentsByType<TComponentType>() where TComponentType : KSComponent
{
return this.GetComponentsByType (typeof(TComponentType)).Cast<TComponentType>();
}
但是,不应该使用 .NET 4.0 这也可以:
public IEnumerable<TComponentType> GetComponentsByType<TComponentType>() where TComponentType : KSComponent
{
return (IEnumerable<TComponentType>)this.GetComponentsByType (typeof(TComponentType));
}
编辑:
KSComponent
是基类,TComponentType
可以是(例如)KSMoveComponent
,哪个子类KSComponent
。我的情况是上面代码所在的类包含KSComponent
一个特定类型的列表,例如:
typeof(KSMoveComponent)
映射到List<KSComponent>()
. 列表的所有元素实际上都是 type KSMoveComponent
。所以我想让它直接List<KSComponent>
被转换List<KSMoveComponent>
,而不是使用Linq.Cast()
扩展。
这归结为一个问题:我有汽车清单,我可以 100% 确定它们都是梅赛德斯 - 为什么我不能得到梅赛德斯的清单?:-)