-
21-08-2019 - |
题
我有一个名为“基类”级。 从该I类继承一个类名称“inheritedClass”(公共类inheritedClass:基类)
在基类包含返回一个HashSet<baseClass>
公共函数。当从inheritedClass调用的返回类型显然仍HashSet<baseClass>
,但我需要一个HashSet<inheritedClass>
。
A转换ALA(HashSet<inheritedClass>
)的returnValue,其中的returnValue是类型HashSet<baseClass>
的不起作用。
有一种方法以从基类到inheritedClass HashSet中型转换而无需每个元素手动转换?
在预先感谢 弗兰克
解决方案
你真的是C#的标签? HashMap
是一个Java类。此外,它通常具有两个类型的参数,而不是一个...
在C#,通用类始终不变的。 一些接口将在C#4的变体,但只有极少数(只有那些要么仅在输出positiion使用类型参数,例如IEnumerable<T>
,或仅使用类型参数中的输入位置,例如IComparable<T>
)。
如果您可以提供有关你的情况更准确的信息,我们可能能够帮助想出了一个简单的解决方案 - 特别是如果你可以用它Cast<T>()
方法使用LINQ
编辑:好的与HashSet<T>
:
HashSet<BaseType> baseSet = ...;
var derivedSet = new HashSet<DerivedType>(baseSet.Cast<DerivedType>());
请注意,即使是用C#4,这将是必要的,因为编译器不知道在baseSet
每个值是DerivedType
的一个实例 - 必须有一个执行时间检查。反向(创建从一个HashSet<BaseType>
HashSet<DerivedType>
)将在C#4工作
进一步编辑:如果你只是想用UnionWith
,不需要一个HashSet<DerivedType>
- 它需要一个IEnumerable<DerivedType>
。我建议你做的:
HashSet<BaseType> baseSet = ...;
HashSet<DerivedType> derivedSet = ...;
derivedSet.UnionWith(baseSet.Cast<DerivedType>());
其他提示
这里的溶液
//**Your BaseClass**
public class BaseClass<T> where T : BaseClass<T>
{
public HashSet<T> GetHashSet()
{
HashSet<T> _hSet = new HashSet<T>();
//do some work
//create a HashSet<T> and return;
return _hSet;
}
}
//**Your Inherited/Derived Class**
public class InheritedClass : BaseClass<InheritedClass>
{
//you have the method inherited as you need.}
}