10 Jun
2006

Prüfen auf generisches Interface in .NET 2.0

 

Möchte man in .NET 2.0 ein Objekt darauf prüfen das ein generisches Interfaces implemtiert, so ist das gar nicht so einfach. Keine der üblichen Verdächtigen unter den Funktionen der Sprache C# oder der Type-Klasse führen zum Erfolg [1] Es ist der "Umweg" über Reflection nötig um rauszufinden ob ein bestimmtes generisches Interface implementiert ist. Aber auch da ist ein einfacher Typ-Vergleich nicht möglich, man muss über den Namen des Typs gehen. Mit dieser Funktion ist dies sehr einfach möglich. [c#] public static bool IsInterfaceImplemented(object obj, Type interfaceType) { if (obj == null) throw new ArgumentNullException("obj"); return obj.GetType().FindInterfaces( new TypeFilter( delegate(Type type, object filter) { return (type.Name == ((Type)filter).Name) && (type.Namespace == ((Type)filter).Namespace); }), interfaceType ).Length == 1; } [/c#] Die Anwendung (mehr oder weniger Pseudocode) [c#] public class Test1Col : List {} public class Test2Col : ILIst {...interface implementation...} public void Test() { Test1Col o1 = new Test1Col(); Test2Col o2 = new Test2Col(); IsInterfaceImplemented(o1, type(IList<>); IsInterfaceImplemented(o2, type(IList<>); } [/c#] Funktioniert natürlich auch mit allen anderen Interfaces, doch da funktioniert auch das übliche. [c#] typeof(IList).IsAssignableFrom(o1.GetType()) typeof(IList).IsAssignableFrom(o2.GetType()) [/c#]
[1] [url]http://glengamoi.com/forums/thread/5499.aspx[/url]
Der Eintrag ist mir etwas Wert
 
Comments have been closed on this topic.