2012-03-26 18 views
0

Hallo, wie mache ich das unten?mit Variablen Variablen aufrufen

int z = 1; 
string one = "pc"; 
string two = z.ToString(); 
        //what goes here 
Console.Write("Host One:\tSent-{0}\tSuccess-{1}\tFail-{2}", xxxxx.numepings, pc1.numepings_s, pc1.numepings_f); 
Console.WriteLine(); 

so in meinem Code pc1 ist eine Instanz eines Objekts, was kann ich verwenden in der Linie //what goes here und dann anstelle der xxxxx so, dass ich die Instanz aus dem concanatated String-Variable pc und int 1 anrufen kann? ?

+0

_ "pc1" ist eine Instanz eines Objekts_ - Nein, Instanzen haben keine Namen. 'pc1' ist eine Referenzvariable, die zufällig auf eine bestimmte Instanz zeigt. –

+0

Es tut mir leid, ich verstehe deine Frage überhaupt nicht. Was versuchst du hier zu erreichen, und warum? Was haben die Variablen "z", "eins" und "zwei" mit irgendetwas zu tun? –

Antwort

5

Grundsätzlich nicht. Sie kann möglicherweise Reflexion verwenden, aber es ist eine schlechte Idee. Stattdessen sollten Sie eine Sammlung immer dann verwenden, wenn Sie Verweise auf mehrere Objekte speichern und sie mit einer Art von Schlüssel adressieren möchten (ob das ein Index, ein Name oder was auch immer ist).

Anstatt also mit:

Foo pc0; 
Foo pc1; 
Foo pc2; 
... 

würden Sie haben:

List<Foo> pcs; 
... 
Foo pc = pcs[z]; 
+0

mmmm Ich erinnere mich an so etwas in VBA, aber das war vor einer Weile, müssen Sie einen Blick darauf werfen. – DevilWAH

+0

Und wenn Sie auf die Objekte durch eine Zeichenfolge Label/Tag anstelle eines Index zugreifen möchten, verwenden Sie ein Wörterbuch anstelle einer Liste. –

+0

@DevilWAH: Ja, Sie können es vielleicht von VBA aus tun - das bedeutet nicht, dass Sie * sollten *, oder dass Sie das gleiche Idiom in C# verwenden können. –

0

Siehe hier: http://msdn.microsoft.com/en-us/library/1fce0hc8.aspx

// Create an instance of the SomeType class that is defined in this 
// assembly. 
var oh = Activator.CreateInstanceFrom(Assembly.GetEntryAssembly().CodeBase, one + z /* as a full type name */); 

// Call an instance method defined by the SomeType type using this object. 
dynamic st = oh.Unwrap(); 

st.DoSomething(5); 

Sie können etwas tun, ein Objekt zu erstellen, aus Es ist String-Name - aber Sie können es nicht auf einen bestimmten Typ ohne Probleme zu werfen.

Sie können schummeln und verwenden Sie dynamic obwohl.

Edit: Entschuldigung, das war ursprünglich nicht ganz richtig - und ich habe mein Beispiel behoben.

+0

Während dies die eigentliche Frage beantwortet, denke ich, das ist ein schlechter Ratschlag. –

+0

Ich sehe, dass dies nicht die beste Antwort ist, gegeben Jons Antwort - aber es ist immer noch eine Antwort auf die Frage, explizit. –

+0

Hah - einverstanden. :) - Aber es kann für jemanden nützlich sein, der nach einer Antwort zu einem ähnlichen Problem sucht, das von den oben genannten Ratschlägen nicht profitieren kann. –