2017-09-08 8 views
-1

Hey nicht verwenden Ich habe versucht, einen Typ als Parameter zu verwenden und typeof(Class) zu verwenden, um den Typ zu erhalten.C# Funktion mit Typ als Parameter? Kann es in Aufgabe

Mein Problem ist, dass ich die Art in einer Aufgabe wie folgt verwenden kippe:

CreditorList = new ObservableCollection<DataModel>(); 

Ist das möglich ??

-Code für Referenz:

private void Dg_Loaded(object sender, RoutedEventArgs e) 
     { 
      CreateList(typeof(CreditorClient)); 
     }  

async private void CreateList(Type DataModel) 
     { 
      CreditorList = new ObservableCollection<DataModel>(); 
     } 

Fehler:

Cannot implicitly convert type '...OberservableCollection' to '...DataModel.CreditorClient'

+1

Welche Art ist CreditorList? –

+0

Warum nicht 'ObservableCollection ' verwenden? –

+0

Dies ist fast nie das Richtige zu tun. Selbst wenn Sie das Objekt erfolgreich erstellt haben, werden Sie Probleme haben, das Objekt tatsächlich zu verwenden, wenn Sie den generischen Typ für Variablen, die für den Zugriff auf das Objekt verwendet werden, nicht statisch deklarieren können. Aber, wenn Sie darauf bestehen, ist dies eine allzu oft gestellte Frage. Eines der frühesten Duplikate ist oben gezeigt. –

Antwort

0

Sie können dies nicht direkt müssten Sie Reflexion verwenden, um die Liste zu erstellen, es können Sie es als eine Type übergeben möchten .

CreditorList = Activator.CreateInstance(typeof(ObservableCollection<>).MakeGenericType(DataModel)) 

Ich würde empfehlen, Sie finden ein Design, wo dies jedoch nicht erforderlich ist. Die Reflexion ist langsam und hässlich und es könnte zu Problemen kommen.

+0

zeigt den gleichen Fehler ... nur mit Objekt anstelle von OberservableCollection –

+0

Deshalb fragte ich nach dem Typ von 'CreditorList' Sie müssen es auf diesen Typ umwandeln .. hoffentlich eine Schnittstelle die' ObservableCollection' implementiert, die keine generischen Argumente hat, Andernfalls ist dies nicht möglich. –

-1

Bitte versuchen Sie den folgenden Code:

private void Dg_Loaded(object sender, RoutedEventArgs e) 
     { 
      CreateList<CreditorClient>(); 
     }  

async private void CreateList<TModel>() 
     { 
      CreditorList = new ObservableCollection<TModel>(); 
     } 
+0

zeigt denselben Fehler ... nur mit anstelle von OberservableCollection –

0

Versuchen Reflexion zu nutzen:

private void Dg_Loaded(object sender, RoutedEventArgs e) 
{ 
    CreateList(typeof(CreditorClient)); 
}  

async private void CreateList(Type DataModel) 
{ 
    Type genericType = typeof(ObservableCollection<>).MakeGenericType(DataModel); 
    CreditorList = new ObservableCollection<Activator.CreateInstance(genericType)>(); 
} 
+0

Gleicher Fehler ..... –

+0

Welcher Typ ist CreditorList? – koca2000

+0

Ich bin nicht sicher .. wenn ich versuche, einen Breakpoint auf Typeof (CreditorList) zu machen, gebe ich mir den Weg zur Klasse ... –

Verwandte Themen