我有一个名为“基类”级。 从该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.}
}
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top