2017-05-08 2 views
3

In .NET habe ich eine Instanz von ConstructorInfo. Der Deklarationstyp ist ein konstruierter generischer Typ (alias foo.DeclaringType.IsConstructedGenericType == true). Ich möchte die ConstructorInfo Instanz abrufen, die zu dem offenen Typ gehört, dh die generische Typdefinition des Deklarationstyps.Mit 'ConstructorInfo' von einem konstruierten generischen Typ, wie bekomme ich die passende 'ConstructorInfo' vom offenen Typ?

Es ist einfach, den offenen Typ selbst mit foo.DeclaringType.GetGenericTypeDefinition() zu erhalten; An dieser Stelle gibt es jedoch keinen offensichtlichen Weg, den passenden Konstruktor zu erhalten. Ich kann alle Konstruktoren auf beiden Seiten neu aufzählen, aber dann stehe ich immer noch vor dem Problem, diese beiden Listen zusammenzuführen; und ich bin nicht sicher, dass .NET garantiert, dass die Konstruktoren in der gleichen Reihenfolge aufgelistet werden.

Hat jemand eine Möglichkeit, das Original ConstructorInfo Gegenstück zu erhalten?

Antwort

3

Ich glaube, Sie können die Konstrukteure entsprechen die MetadataToken Eigenschaft mit:

var closed = foo.GetType().GetConstructors().Select(c => c.MetadataToken); 
var open = foo.GetType().GetGenericTypeDefinition().GetConstructors().Select(o => o.MetadataToken); 
var b = Enumerable.SequenceEqual(closed, open); //returns true 

Es scheint, dass die geschlossene und offene Version der Konstrukteure die gleichen Metadatentoken hat, so wäre dies ein Weg sein, sowohl hook up Listen. Dies gilt auch, wenn die generische Klasse und der geschlossene Typ in verschiedenen Assemblys definiert sind.

Ich habe nichts gefunden, das diese als dokumentierte Verhalten bescheinigt, aber Sie sollen weiter zu untersuchen, die Lage sein, in den ECMA C# and Common Language Infrastructure Standards oder Standard ECMA-335 - Common Language Infrastructure (CLI)

+0

Jetzt nur, wenn ich herausfinden kann, wie es 1.1 für .NET-Norm zu tun (keine "MetadataToken" -Eigenschaft!) Ich wäre ein fröhlicher Junge. +1 zw –

Verwandte Themen