2017-02-15 5 views
1

Es gibt eine leichte Möglichkeit, dass ich den Titel falsch formuliert hätte und ich entschuldige mich, wenn das so beantwortet wird (und ich habe es einfach nicht getan fand es).Wie man mit Type.GetType() einen unbekannten Typ zur Laufzeit an eine generische Methode übergibt

Nachdem ich gesagt habe, dass ich diese Seite seit mehreren Stunden durchsucht habe und auf mehrere sehr verwickelte Versuche (nicht klar genug) der Verwendung der Reflexion gestoßen bin, die ich aus Leistungsgründen nicht verwenden möchte. Ich verwende bereits Type.GetType(), das durch die DLL sucht, um den Typ zu finden.

Also, ohne weitere Umschweife, hier geht ..

ich eine Methode in einer Klasse, die eine generische Art akzeptiert:

public class SomeClass 
{ 
    public TList Execute<TList, TItem>(string text) 
     where TList : ICollection<TItem>, new() 
     where TItem : new() 
    { 
     TList list = new TList(); 
     TItem item = new TItem(); 
     ...set properties and add to list... 
     ...implementation not important... 
     return list; 
    } 
} 

Verwendung (Aufruf-Methode):

public void callingMethod(string typeNameString, string typeItemNameString) 
{ 
    Type T = Type.GetType(typeNameString); 
    Type Ti = Type.GetType(typeItemNameString); 

    SomeClass sc = new SomeClass(); 

    // and here is where things falls apart drastically.. 
    // not sure exactly what to do here as it seems noting works 
    var result = sc.Execute<T,Ti>("hello text"); //no luck..'T' is a variable but used as a type 
    var result = sc.Execute<Type.GetType(typeNameString),Ti>("hello text"); //no luck...operator '<' cannot be appliedto operands of type 'method group' and 'Type' 

    //This works fine 
    List<Invoice> _invoices = sc.Execute<Invoices, Invoice>("hello text"); 
} 

public class Invoice 
{ //properties omitted } 

public class Invoices : List<Invoice> 
{} 

Dies scheint ein sehr direkter/logischer Ansatz zu sein, ist aber nicht der Fall.

Was fehlt mir?

Ich schätze die Zeit und Hingabe, die Einzelpersonen nehmen, um auf Fragen in diesem Forum zu antworten.

Antwort

1

Sie können die Notation <> nicht verwenden, da der Compiler tatsächlich die Klasse mit dem eingebauten Typ erstellt. Daher muss sie zur Kompilierungszeit bekannt sein. Für das, was Sie versuchen, müssen Sie Reflexion verwenden.

Verwandte Themen