2016-05-10 12 views
1

Ich versuche eine Java-Bibliothek in C# -Code zu übersetzen, und da ich neu bei C# bin (und bis vor kurzem noch nie mit Generics gearbeitet habe), kämpfe ich ein bisschen ...C# entspricht der Klasse <E> und E extends Enum <E>

Wie für Java-Generika, versuche ich (und mehr oder weniger Verständnis) seine Art der Operation. Obwohl ich dieses Why not extending from Enum<E extends Enum<E>> und dieses How to use Class<T> in Java? überprüft habe, bin ich nicht in der Lage, wirklich zu verstehen, was in diesem Stück Java-Code vor sich geht, und infolgedessen kann ich nicht über einen gleichwertigen C# -Code nachdenken.

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); 
    } 
    ... 
} 

in C# Mein Ansatz ist bisher folgendes:

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' 
} 

Als ich readQueries = new Dictionary<E, ReadObjectVarQuery<E>>(enumClass); habe ich versucht, die entsprechenden Java EnumMap(Class<K> keyType), aber die Überprüfung der Dokumentation über Wörterbuch https://msdn.microsoft.com/es-es/library/xfhwa508(v=vs.110).aspx Ich bin nicht sicher zu bekommen dies ist möglich,

+1

Was ist 'Enum ' und 'enumClass'? –

+2

'TraciObject : IEnumerable ' ist wahrscheinlich das, was Sie suchen –

Antwort

2

Von Java Doc: EnumMap(Class<K> keyType):

Erstellt eine leere Enum-Map mit dem angegebenen Schlüsseltyp.

Es scheint, der Dictionary Konstruktor Sie suchen, ist die parameterlos ein.

Von MSDN:

Dictionary<TKey, TValue>(): Initialisiert eine neue Instanz der Klasse Dictionary, die leer ist, hat die Standardanfangskapazität und verwendet den Standardgleichheitsvergleich für den Schlüsseltyp.

+0

Es scheint zu funktionieren. Vielen Dank! – Biurrun

Verwandte Themen