我正在尝试将一个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的文档我不确定这是否可行