假设我有一个通用类,如下所示:

public class GeneralPropertyMap<T>
{
}

在其他一些类中,我有一个接受GeneralPropertyMap<T>数组的方法。在Java中,为了接收包含任何类型的GeneralPropertyMap的数组,该方法应如下所示:
private void TakeGeneralPropertyMap(GeneralPropertyMap<?>[] maps)
{
}

我们使用通配符,以便稍后我们可以调用TakeGeneralPropertyMap并传递一堆GeneralPropertyMap,每种类型的T都一样,如下所示:
GeneralPropertyMap<?>[] maps = new GeneralPropertyMap<?>[3];
maps[0] = new GeneralPropertyMap<String>();
maps[1] = new GeneralPropertyMap<Integer>();
maps[2] = new GeneralPropertyMap<Double>();
//And finally pass the array in.
TakeGeneralPropertyMap(maps);

我试图找出C#中的等效项,但没有成功。有任何想法吗?

最佳答案

C#中的泛型比Java中的泛型提供了更强的保证。因此,要在C#中执行所需的操作,必须让GeneralPropertyMap<T>类继承自该类(或接口(interface))的非泛型版本。

public class GeneralPropertyMap<T> : GeneralPropertyMap
{
}

public class GeneralPropertyMap
{
    // Only you can implement it:
    internal GeneralPropertyMap() { }
}

现在您可以执行以下操作:
private void TakeGeneralPropertyMap(GeneralPropertyMap[] maps)
{
}

和:
GeneralPropertyMap[] maps = new GeneralPropertyMap[3];
maps[0] = new GeneralPropertyMap<String>();
maps[1] = new GeneralPropertyMap<Integer>();
maps[2] = new GeneralPropertyMap<Double>();
TakeGeneralPropertyMap(maps);

08-26 19:02