Laden...

CodeDom: vollqualifizierten(!) Namen von NestedClasses ermitteln

Erstellt von Quaneu vor 9 Jahren Letzter Beitrag vor 9 Jahren 1.776 Views
Quaneu Themenstarter:in
692 Beiträge seit 2008
vor 9 Jahren
CodeDom: vollqualifizierten(!) Namen von NestedClasses ermitteln

Hallo zusammen,

ich baue gerade einen Xsd-Parser und benutze dazu CodeDom. Nun würde ich gern NestedClasses erzeugen. Dies ist auch kein Problem, jedoch würde ich gerne den "vollen" Namen der Klasse wissen.
Z.B.


internal class A
{
   internal class B
   {   }
}

Ich habe von B nun eine CodeTypeDeclaration und würde gerne folgenden Namen bekommen A.B. Jedoch steht im Namen nur B. Gibt es eine Möglichkeit an den vollen Namen zu gelangen und wenn welche?

Schöne Grüße
Quaneu

49.485 Beiträge seit 2005
vor 9 Jahren

Hallo Quaneu,

du kannst doch per CodeTypeDeclaration.BaseTypes den Vererbungsbaum durchlaufen und dadurch sukzessive alle Namensbestandteile ermitteln.

herbivore

PS: Es ist natürlich Unsinn, den Vererbungsbaum zu durchlaufen; relevant ist der Verschachtelungsbaum (siehe Antwort von Palladin007 weiter unten).

Quaneu Themenstarter:in
692 Beiträge seit 2008
vor 9 Jahren

Hallo herbivore,

danke für Deine schnelle Antwort. Die Collection ist immer leer. Außerdem dachte ich, dass diese nur die Vererbten Typen beinhaltet.
Im Notfall kann ich den Namen auch selber zusammenbauen. Ich hatte gehofft, dass es da vielleicht schon was gibt 😃.

Schöne Grüße
Quaneu

2.078 Beiträge seit 2012
vor 9 Jahren

Die Klasse MemberInfo besitzt eine Property DeclaringType, die beinhaltet den Typ, in dem der Member deklariert wurde.
Da auch ein Type ein Member ist und damit von MemberInfo erbt, lässt sich so der umschließende Typ eines weiteren Typs heraus finden - oder eben null, wenn es keinen gibt.

Den Namen musst du dir dann aber selber zusammen bauen, das sollte mit Hilfe dieser Property aber kein Problem sein.

Quaneu Themenstarter:in
692 Beiträge seit 2008
vor 9 Jahren

Hallo Palladin007,

leider stehe ich gerade ein bisschen auf dem Schlauch... wie soll ich das den mit CodeTypeDeclaration machen? GetType() und dann?

Schöne Grüße
Quaneu

49.485 Beiträge seit 2005
vor 9 Jahren

Hallo Quaneu,

der Vorschlag von Palladin007 geht wohl davon aus, dass du den vollqualifizierten Namen erst ermittelst, wenn du schon die Ergebnis-Assmbly generiert hast. Keine Ahnung, ob das zu spät wäre.

Wenn ich dich richtig verstehe, erzeugst du doch selbst die CodeTypeDeclaration-Objekte. Dann musst du doch eigentlich auch wissen, wie diese geschachtelt sind oder könntest es dir bei der Erzeugung merken.

Daher musst du doch die Schachtelungsstruktur gar nicht aus dem CodeTypeDeclaration ermitteln, sondern merkst sie dir einfach bei der Erzeugung.

Du kann ein Dictionary<CodeTypeDeclaration, String> verwenden, um dir zu dem jeweiligen CodeTypeDeclaration-Objekt seinen vollqualifizierten Namen merken.

herbivore

Quaneu Themenstarter:in
692 Beiträge seit 2008
vor 9 Jahren

Hallo herbivore,

ok, das macht Sinn 😃.

Wollte nur sicher gehen, dass es da nicht schon was gibt, dass mir den Namen zusammenbaut.
Da ich die CodeTypeDeclaration-Objekte selber zusammenbaue, kann ich es natürlich auch selbst zusammenbauen. Vielen Dank für Deine Hilfe und Deinen Vorschlag.

Schöne Grüße
Quaneu