2016-08-03 14 views
1

Ich habe den folgenden Code, aber ich kann es nicht zum Laufen bringen. Alles ich möchte eine Liste von Instanzen aus einer bestimmten Liste von Typen erstellen.Abrufen von Instanzen aus einer Liste von Typen

List<Type> types = new List<Type> 
{ 
    typeof(String), 
    typeof(Double), 
    typeof(Object) 
}; 

List<object> instances = types.Select(t => Activator.CreateInstance(t) as t); 

Ich erhalte den Fehler

> t is a variable but is used like a type 
+2

Könnten Sie bitte "* ich kann es nicht laufen lassen" weiter machen? –

+0

Ich habe die Frage mit dem Syntaxfehler bearbeitet, den ich bekomme. . – heltonbiker

+1

Gut, das nicht einmal kompilieren, wie Sie versuchen, es auf die tatsächliche Art zu werfen können Sie Liste Instanzen sagen = types.Select (t => Activator.CreateInstance (t)) ToList(); aber das wird immer noch zur Laufzeit brechen, da nicht alle diese Standardkonstruktoren haben –

Antwort

2

Der Compiler-Fehler hier ist aufgrund der Tatsache, dass mit den Worten als t Sie nicht der Compiler automatisch ermöglicht es Gussobjekt einzugeben. Dieser Code ist immer noch fehlerhaft, da alle Typen in der Liste über Standardkonstruktoren verfügen müssen (die Zeichenfolge hat keinen Standardkonstruktor).

+0

Der Code in Ihrem Kommentar funktioniert, und die Typen in meinem Code sind als Beispiele gemeint. Ich plane, eine "Liste " zu erstellen und abgeleitete Typen zu verwenden, um polymorphe Instanzen zu erstellen. – heltonbiker

+0

Ich weiß nicht genau, was der Zweck hier ist, aber das eine Mal, als ich Code wie diesen schrieb, stellte sich heraus, dass es wahnsinnig stinkender Code war. –

+0

Ich habe einige Berechnungen, die ich ausführen möchte. Für jede 'Selection'-Instanz, die ich erstelle, brauche ich die Berechnungen, also habe ich eine Klasse für jede Art von Berechnung. Ich möchte beim Start der Anwendung über IoC oder dynamische DLL-Laden eine Liste aller möglichen Berechnungen erstellen, die ich instanziieren könnte. Also wenn ich eine Basisklasse 'Calculation' und Unterklassen' MaxCalculation', 'AverageCalculation' usw. habe Und für jede' Selection' die ich erstelle, brauche ich eine Instanz jeder verfügbaren Unterklasse von 'Calculation'. Und ich stimme völlig zu, dass mein Code so riecht, wie er jetzt ist. – heltonbiker