2013-04-27 4 views
1

Есть ли способ в C# или VB динамически вызывать переменные из цикла? Вместо того, чтобы идти одна за другой из каждой переменной?Динамически вызывать переменные из цикла?

Представьте следующий пример, я хочу установить dog1Legs, dog2Legs, dog3Legs, есть способ, как вызвать их из цикла?

String dog1Legs; 
String dog2Legs; 
String dog3Legs; 

for(int i=1; i<4; i++) 
{ 

    dog(i)Legs = "test"; 
} 
+2

Это называется массив действий , если вы действительно хотите вызвать. В противном случае это просто массив. –

+1

Это то, что [массивы] (http://msdn.microsoft.com/en-us/library/vstudio/9b9dty7d.aspx) для. – GSerg

+0

Я спросил то же самое сегодня: http://stackoverflow.com/questions/16249823/how-can-i-use-variables-on-variable-name/16250133#16250133 – 1342

ответ

1

Нет, вы не можете этого сделать. Типичное решение словарь:

Dictionary<String, String> dogs = new Dictionary<String, String>(); 

    dogs.Add("dog1Legs", null); 
    dogs.Add("dog2Legs", null); 
    dogs.Add("dog3Legs", null); 

    for(int i = 1; i < 4; i++) { 
    dogs["dogs" + i.ToString() + "Legs"] = "test"; 
    } 
3

Вам следует использовать массив или список. Например.

var dogLegs = new String[3]; 

for(int i=0; i<dogLegs.Length; i++) 
{ 
    dogLegs[i] = "test"; 
} 

Или сделать Dog класс может иметь смысл, например,

void Main() 
{ 
    var dogs = new List<Dog>(); 
    dogs.Add(new Dog { Name = "Max", Breed = "Mutt", Legs = 4 }); 
    foreach (var dog in dogs) 
    { 
     // do something 
    } 
} 

class Dog 
{ 
    public int Legs { get; set; } 
    public string Breed { get; set; } 
    public string Name { get; set; } 
} 
+0

Спасибо за ваше время и комментарий – Vince

4

вам не нужны никакие писать код как

String dog1Legs; 
String dog2Legs; 
String dog3Legs; 

for (int i=1; i<4; i++) 
{ 
    FieldInfo z = this.GetType().GetField("dog" + i + "Legs"); 
    object p = (object)this;  
    z.SetValue(p, "test"); 
} 
+0

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

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