none
Generische Methode mit variablen Typparameter RRS feed

  • Frage

  • Hallo,
    ich habe eine einfache generische Methode:

    public T Show<T>() where T : Form
    {
       //
    }


    Der Aufruf funktioniert:

    var form = Controller.Show<TestForm1>();


    Jetzt will ich aber in Abhängigkeit von einer Variable entweder die eine Formklasse oder die andere Formklasse als Typparameter setzen:

    Type t = isTestBig ? TestForm1 : TestForm2;

    var form = Controller.Show<t>();

    Das funktioniert nicht.
    Was muss ich am Aufruf der Methode ändern - nicht die Methode selbst -, damit das funktioniert?

    Montag, 30. Mai 2022 15:47

Antworten

Alle Antworten

  • Hallo Alexander,

    das wird so nicht gehen. An irgendeiner Stelle muss der Compiler ja nunmal wissen, was da kommt. Du willst das zur Laufzeit machen, das ist dann zu spät. Wenn Du das unbedingt so machen willst, nimm object als Übergabetyp. Dafür musst Du aber die Methode ändern.

    Du schränkst T auf Form ein, übergibst dann aber Type, das geht so natürlich auch nicht.

    Über Reflection und/oder dynamic könnte man das evtl. machen, ich für meinen Teil habe mich daran noch nicht versucht, da ich noch nicht das Bedürfnis hatte. Aber evtl. hilft dir das hier trotzdem:

      How do I use reflection to call a generic method?



    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET (2001-2018)
    https://www.asp-solutions.de/ - IT Beratung, Softwareentwicklung, Remotesupport

    Montag, 30. Mai 2022 22:24
    Moderator
  • Hallo Alexander,

    ich meine das hier:
    Form t = isTestBig ? TestForm1 : TestForm2;
    sollte treffen.

    Grüße Alexander

    Mittwoch, 1. Juni 2022 03:40
  • Schon probiert? :)

    Egal, ob TestForm1 und TestForm2 Typen oder Form Instanzen sein sollen, geht das so natürlich nicht.


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET (2001-2018)
    https://www.asp-solutions.de/ - IT Beratung, Softwareentwicklung, Remotesupport

    Mittwoch, 1. Juni 2022 07:15
    Moderator