Autor Beitrag
Raban
Hält's aus hier
Beiträge: 1



BeitragVerfasst: Di 11.10.11 16:42 
Hallo Gemeinde,

ich suche eine Möglichkeit wie man aus einem vorhanden Objekt einen generischen Typparameter machen kann.

ausblenden C#-Quelltext
1:
2:
TestClass c = new Testclass();
someFunction<c>();

Dieses Beispiel soll nur veranschaulichen was ich eigentlich meine. In meinem direkten Fall kenne ich leider die Klasse nicht, sondern habe nur das Objekt.
Ich könnte zwar mit "is" abfragen ob es sich um eine bestimmte Klasse handelt, aber dann müsste ich ja jede Klasse im code bekannt machen und das wollte ich eigentlich nicht.
Hat jemand ein Schlagwort oder einen Lösungsansatz für mich?

MfG
Raban
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4796
Erhaltene Danke: 1059

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Di 11.10.11 17:07 
Hallo und :welcome:

Sorry, das wird so direkt leider nicht funktionieren, da ja generische Klassen (bzw. Methoden) zur Kompilierzeit erzeugt werden.
Du könntest aber Reflection benutzen - auf Anhieb weiß ich jedoch auch nicht genau, wie man dies am besten löst.
Stichworte wären aber dafür: GetType(), Type.MakeGenericType(), MethodInfo und evtl. noch Activator.CreateInstance

Wie sieht denn deine Methodendeklaration aus (d.h. verwendest du eine where-Einschränkung bei den Typen)? Weil dann wäre eine Schnittstelle (interface) doch besser geeignet, und der Methode wäre es dann ja egal, mit welchem konkreten Typen sie aufgerufen wird:
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
interface ITest
{
}

void SomeFunction<T>() where T : ITest
{
}