Herausfinden welche Typen von einem best. Generischen Typ ableiten??



  • Ich hab diverse Instancen von "Foo" Typen in einer Liste, und will nun nur die Objekte, welche von "Foo<T>" ableiten, wie kann ich das mit Reflections filtern? Die einzigste Möglichkeit dir mir einfällt, ist das ich nach Objekte welche den BasisTyp Name "Foo´1" haben... gibt ne bessere möglichkeit?

    Grüße

    Beispiel:

    class Foo 
    {}
    class Foo<T> : Foo 
    {}
    class FooA : Foo<int> 
    {}
    class FooB : Foo<short> 
    {}
    class FooC : Foo
    {}
    


  • Hilft dir vielleicht das hier:

    public interface IFoo { void Out(); }
    	public class Foo {}
    	public class Foo<T> : Foo, IFoo
    	{
    		public virtual void Out()
    		{
    			Console.WriteLine("Foo<T>");
    		}
    	}
    	public class FooI : Foo<int>
    	{
    		public override void Out()
    		{
    			Console.WriteLine("FooI");
    		}
    	}
    	public class FooF : Foo<float> 
    	{
    		public override void Out()
    		{
    			Console.WriteLine("FooF");
    		}
    	}
    
    	class Program
    	{
    		static void Main()
    		{
    
    			Foo[] array = new Foo[] { new FooF(), new FooI(), new Foo() };
    
    			foreach(Foo f in array)
    				if(f is IFoo)
    					((IFoo)f).Out();
    
    			Console.ReadKey();
    
    		}
    

    Auch wenn ich kein Freund davon bin, zur Laufzeit mit dem Is-Operator zu prüfen, aber so könntest du die Reflection umgehen, oder seh ich das falsch?



  • Hallo FireFighter.. ja so war dan auch meine Lösung 😉 👍



  • Hallo ihr beiden,

    es gibt auch noch die Möglichkeit mittels IsGenericType und GetGenericTypeDefinition, s. http://www.mycsharp.de/wbb2/thread.php?threadid=95067 (insbesondere der letzte Beitrag von dN!3L, wobei hier nach Interfaces überprüft wird) sowie http://www.mycsharp.de/wbb2/thread.php?threadid=60439



  • Mal rein prinzipiell: Was genau willst du mit dieser Information (wer von was ableitet) dann anstellen?


Anmelden zum Antworten