2017-12-19 9 views
-1

Ich versuche einen DWARF-Parser in C# zu schreiben. DWARF hat das Konzept mehrerer numerischer Typen (DW_FORM_data2, DW_FORM_data4, DW_FORM_data8, , DW_FORM_udata), die alle in enum-Typen aufgelöst werden können. Ich würde gerne eine IConstant machen, die die zuvor genannten DW_FORM_* Klassen implementieren, die Sie in eine enum (genauso wie Sie ushort, int etc. zu einer enum werfen können) werfen können.Wie man einen neuen numerischen Typ erstellt, der in CU in eine Aufzählung umgewandelt werden kann #

Ein Cast-Operator ist jedoch eine statische Methode, und ich kann das nicht auf eine Enum setzen. Wie wird eine Gruppe von numerischen Typen erstellt, die in enums umgewandelt werden können? Ein komplizierender Faktor ist, dass die Größe (8 Bits, 32 Bits usw.) einer DW_FORM_udata oder DW_FORM_sdata Nummer nicht definiert ist, bis sie decodiert ist.

+0

Möchten Sie in der Lage sein, zu jeder 'enum' zu casten? – NetMage

+1

Warum möchten Sie casten und haben nicht nur eine Methode, um die Konvertierung durchzuführen? – DavidG

+0

Ja. Irgendein enum. Vielleicht ist eine Methode der richtige Weg. Also einfach eine 'ToEnum()' Methode auf der Oberfläche hinzufügen? Das könnte die Antwort sein, nach der ich suche. Würden Sie 'ToEnum' generisch machen? – watkipet

Antwort

0

Sie können eine einfache Schnittstelle erstellen (nicht sicher IConstant ist der beste Name):

public interface IConstant { 
    TEnum ToEnum<TEnum>(); 
} 

Und dann in jedem Ihrer numerischen Typ Klassen implementieren es, so etwas wie:

public TEnum ToEnum<TEnum>() { 
    return (TEnum)Enum.ToObject(typeof(TEnum), Value); 
} 

Dann Sie können ihn anrufen, indem Sie den Typ enum eingeben:

var ev = data8.ToEnum<TestEnum>(); 

Ohne die Details der Klassen zu kennen, ist es schwer zu sagen, ob Sie mit einer abstrakten Klasse mit einer einzigen Implementierung besser wären, wenn das überhaupt möglich ist.

+0

Das funktioniert sehr gut in meinem Fall. Vielen Dank. Zumal die verschiedenen "constant" Typen in verschiedene C# numerische Typen umgewandelt werden. DWARF bringt sie alle in die "konstante" Klasse - deshalb habe ich sie so genannt. – watkipet

Verwandte Themen