2012-03-26 2 views
0

привет, как это сделать ниже?с использованием переменных для вызова переменных

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(); 

так в моем коде pc1 является экземпляром объекта, то, что я могу использовать в строке //what goes here, а затем на месте xxxxx, так что я могу назвать экземпляр из concanatated строки переменной pc и int 1? ?

+0

_ "pc1" - это экземпляр объекта_ - Нет, экземпляры не имеют имен. 'pc1' - это ссылочная переменная, которая указывает на конкретный экземпляр. –

+0

Прошу прощения, я полностью не понимаю ваш вопрос. Что вы пытаетесь достичь здесь и почему? Какие переменные 'z',' one' и 'two' имеют отношение ко всему? –

ответ

5

В принципе, вы этого не делаете. You может потенциально использовать отражение, но это плохая идея. Вместо этого вы должны использовать коллекцию всякий раз, когда вы хотите хранить ссылки на несколько объектов и обращаться к ним с помощью своего рода ключа (будь то индекс, имя и т. Д.).

Так вместо того, чтобы:

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

Вы бы:

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

mmmm Я помню кое-что вроде этого в VBA, но это было давно, нужно взглянуть. – DevilWAH

+0

И если вы хотите получить доступ к объектам с помощью метки метки/тега вместо индекса, используйте словарь вместо списка. –

+0

@DevilWAH: Да, вы вполне можете это сделать из VBA - это не значит, что вы * должны * или что вы можете использовать ту же самую идиому в C#. –

0

Смотрите здесь: 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); 

Вы можете сделать что-то вроде этого, чтобы создать объект, из это имя строки, но вы не можете использовать его для определенного типа без проблем.

Вы можете обмануть и использовать dynamic.

Редактировать: извините, изначально это было не совсем правильно - и я исправил свой пример.

+0

Хотя это отвечает на поставленный вопрос, я думаю, что это плохой совет дать. –

+0

Я вижу, что это может быть не лучший ответ, если ответить Джонсу, но он по-прежнему является ответом на заданный вопрос. –

+0

Hah - согласовано. :) - Но это может оказаться полезным для тех, кто ищет ответ на аналогичную проблему, которая не может извлечь пользу из приведенного выше совета. –

Смежные вопросы