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]