NET4 功能:是否应该可以将通用 IEnumerable 转换为 IEnumerable
本文关键字:IEnumerable MoreSpecifi 转换 是否 功能 NET4 | 更新日期: 2023-09-27 17:59:41
如果我在 .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>()
。列表的所有元素实际上都是类型 KSMoveComponent
。所以我希望将此List<KSComponent>
直接转换为List<KSMoveComponent>
,而不是使用 Linq.Cast()
扩展。
归根结底是:我有汽车清单,我可以 100% 确定它们都是梅赛德斯 - 为什么我不能得到梅赛德斯的清单?:-(
协方差允许您将可枚举强制转换为其更通用的版本。
另一方面,泛型条件允许您将泛型类型替换为更具限制性的内容。
那么为什么它会起作用呢?似乎他们中的两个正在朝着两个不同的方向发展 - 不是吗?
本文关键字:IEnumerable MoreSpecifi 转换 是否 功能 NET4 | 更新日期: 2023-09-27 17:59:41
如果我在 .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>()
。列表的所有元素实际上都是类型 KSMoveComponent
。所以我希望将此List<KSComponent>
直接转换为List<KSMoveComponent>
,而不是使用 Linq.Cast()
扩展。
归根结底是:我有汽车清单,我可以 100% 确定它们都是梅赛德斯 - 为什么我不能得到梅赛德斯的清单?:-(
协
方差允许您将可枚举强制转换为其更通用的版本。
另一方面,泛型条件允许您将泛型类型替换为更具限制性的内容。
那么为什么它会起作用呢?似乎他们中的两个正在朝着两个不同的方向发展 - 不是吗?