2013-04-27 50 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

这就是所谓的行动的数组,如果你真的想调用。否则,它只是一个数组。 – 2013-04-27 11:42:54

+1

这是[arrays](http://msdn.microsoft.com/zh-cn/library/vstudio/9b9dty7d.aspx)适用的内容。 – GSerg 2013-04-27 11:43:29

+0

我今天问同样的事情:http://stackoverflow.com/questions/16249823/how-can-i-use-variables-on-variable-name/16250133#16250133 – 1342 2013-04-27 11:45:34

回答

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 2013-04-27 13:35:04

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

虽然这可以工作 - 假设这些是字段,而不是局部变量 - 反射可能不是处理他在这里需要的最好方法。 – 2013-04-27 12:15:58