Reflextions: Generischer Typ Parameter herrausfinden
-
Hallo Leute,
folgender Umstand:
interface IFoo<T> { } class Bar : IFoo<int> { }
Nun will ich über den Type von Bar herrausfinden welcher generische Type T Foo verwendet!
Meine Lösung:
Type t = typeof(Bar).GetInterface("IFoo´1").GetGenericArguments().First();
Ist das die einzigse bzw. beste und schönste mögluchkeiute?? weil das "IFoo´1" Konvention etwas komisch ist find ich:)
Grüß3
-
Alternative ohne String:
var type = typeof(Bar) .GetInterfaces() .First(t => t.IsGenericType && t.GetGenericTypeDefinition() == typeof(IFoo<>)) .GetGenericArguments() .First();
Grüssli
-
Perfekt!! thx
-
Dravere schrieb:
Alternative ohne String:
var type = typeof(Bar) .GetInterfaces() .First(t => t.IsGenericType && t.GetGenericTypeDefinition() == typeof(IFoo<>)) .GetGenericArguments() .First();
Grüssli
Die Loesung find ich gut, aber eine Anmerkung hab ich da.
Ist es gewollt das du ne Exception bekommst wenn First nichts findet?
Vielleicht FirstOrDefault an der Stelle verwenden?
-
Firefighter schrieb:
Ist es gewollt das du ne Exception bekommst wenn First nichts findet?
Vielleicht FirstOrDefault an der Stelle verwenden?Kommt ganz darauf an, was die Rahmenbedingungen sind. Vielleicht ist es per Logik gegeben, dass immer das Interface
IFoo
implementiert wird. Ich habe jetzt nicht speziell darauf geachtet, dass kann ja jeder so anpassen, wie ihm das gefällt. Man kann es auch ganz ohne Linq lösenGrüssli