C#等价的java类<e>和E扩展了Enum <e>

时间:2016-05-10 15:20:23

标签: java c# generics enums

我正在尝试将一个Java库翻译成C#代码,因为我是C#的新手(直到最近才开始使用泛型),我有点蠢蠢...

对于Java泛型,我正在尝试(或多或少地理解)它的操作方式。虽然我已经检查了这个Why not extending from Enum<E extends Enum<E>>和这个How to use Class<T> in Java?,但是我无法真正理解这段Java代码中发生的事情,结果,我无法考虑等效的C#代码。

public abstract class TraciObject<E extends Enum<E>> {
    private final String id;    
    private final EnumMap<E, ReadObjectVarQuery<?>> readQueries;    
    protected TraciObject(String id, Class<E> enumClass) {
        this.id = id;
        readQueries = new EnumMap<E, ReadObjectVarQuery<?>>(enumClass);
    }
    ...
}

到目前为止,我在C#中的方法如下:

public abstract class TraciObject<E> where E : Enum<E> { //Non-generic type Enum cannot be used with type arguments
private readonly string id;

private readonly Dictionary<E, ReadObjectVarQuery<E>> readQueries;

protected TraciObject(String id, E enumClass)
{
    this.id = id;
    readQueries = new Dictionary<E, ReadObjectVarQuery<E>>(enumClass); //cannot convert from E  to 'System.Collections.Generic.IEqualityComparer'
}

当我readQueries = new Dictionary<E, ReadObjectVarQuery<E>>(enumClass);时,我试图获得与Java EnumMap(Class<K> keyType)对应的内容,但检查有关词典https://msdn.microsoft.com/es-es/library/xfhwa508(v=vs.110).aspx的文档我不确定这是否可行

1 个答案:

答案 0 :(得分:2)

来自Java DocEnumMap(Class<K> keyType)

  

使用指定的键类型创建一个空的枚举映射。

您正在寻找的Dictionary构造函数似乎是无参数构造函数。

来自MSDN

  

Dictionary<TKey, TValue>():初始化一个新的Dictionary类实例,它是空的,具有默认的初始容量,并使用默认的相等比较器作为密钥类型。