2016-05-10 5 views
1

Я пытаюсь перевести одну библиотеку Java в код C#, и так как я новичок в C# (и до недавнего времени не работал с генериками), я немного борюсь ...C# эквивалент java Класс <E> и E extends Enum <E>

Что касается 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

Что такое 'Enum ' и 'enumClass'? –

+2

'TraciObject : IEnumerable ' вероятно, что вы ищете –

ответ

2

От Java Doc: EnumMap(Class<K> keyType):

Создает пустую карту перечисления с указанным типом ключа.

Похоже, что конструктор Dictionary - это без параметров.

От MSDN:

Dictionary<TKey, TValue>(): Инициализирует новый экземпляр словаря класса, который пуст, имеет начальную емкость по умолчанию, и использует компаратор равенства по умолчанию для типа ключа.

+0

Кажется, что это работает. Спасибо! – Biurrun

Смежные вопросы