2012-08-07 41 views
0

引用变量I有许多变量,如使用级联C#

int foo1; 
int foo2; 
int foo3; 
int foo4; 

现在,我有一个for循环中,从变种去x = 0到3(对于4个变量),我会喜欢用x来调用变量是这样的:

for(int x = 0; x < 4; x++) 
{ 
    foo+x = bar; 
} 

,使得当x = 1,那么我的变量foo1将被分配的值栏(FOO + X =酒吧== foo1 =巴当x = 1 )。

是否有任何方式在C#中做到这一点,或者我应该采取一种替代方法?

+0

简答:是的。 – 2012-08-07 02:47:39

+1

有一种涉及反射的冗长的方式,但是应该使用数组('int []')或者'List '来代替。 – Blorgbeard 2012-08-07 02:48:32

回答

1

可以这样做:

var listVariables = new Dictionary<string, int> 
        { 
         { "foo1", 1 }, 
         { "foo2", 2 }, 
         { "foo3", 3 }, 
         { "foo4", 4 }, 
        }; 

for (int x = 1; x <= 4; x++) 
{ 
    listVariables["foo" + x] = bar; 
} 
+0

+1这是我也会提交的解决方案 – 2012-08-07 02:57:10

+0

这实际上是一个好主意,我忘记了字典,并且如果事实上直接解决了我所问的问题,非常感谢:) – user1275067 2012-08-07 03:09:41

4

这是不可能的,除非你想使用反射,这不会是最好的方法。 不知道你想达到什么目的,这是一个有点难以回答,但你可以创建一个数组来保存你的变量,然后用x表示一个索引来访问它们

for(int x = 0; x < 4; x++) 
{ 
    fooarr[x] = bar; 
} 
+0

感谢所有人的快速回答,我只是检查是否可能,我只是使用多维数组,而不是像TimC建议的那样(看到每个变量实际上是一个数组,不仅仅是一个int,对此感到抱歉) 。再次感谢您的快速帮助 – user1275067 2012-08-07 03:07:06

+0

@ user1275067。不要忘记,整数是值类型。如果您将一个数组值赋值为一个值类型变量,则对数组值的更改不会影响原始变量。 – TimC 2012-08-07 03:44:14

0

也许是另一种方法是更好;-)

int[] foo; 

// create foo 

for(int i = 0; i < 4; i++) 
{ 
    foo[i] = value; 
} 
1

很难判断什么是你的特定情况下最好的方法,但它很可能不是好方法。你绝对需要4个变量,或只有4个值。一个简单的列表,数组或字典会做的工作:

int[] array = new int[4]; 
List<int> list = new List<int>(4); 
List<int, int> dictionary1 = new Dictionary<int, int>(4); 
List<string, int> dictionary2 = new Dictionary<string, int>(4); 

for(int x = 0; x < 4; x++) 
{ 
    array[x] = bar; 
    list[x] = bar; 
    dictionary1.Add(x, bar); 
    dictionary2.Add("foo" + x.ToString(), bar); 
} 
0

如果可能的话,你应该使用一个阵列包含四个整数。你可以这样声明:

int[] foos = new int[4];

然后,在你的循环,你应该更改为以下:

for(int i=0;i<foos.Length;i++) 
{ 
    // Sets the ith foo to bar. Note that array indexes start at 0! 
    foos[i] = bar; 
} 

通过这样做,你将仍然有四个整数;您只需使用foos[n]访问它们,其中n是您想要的第n个变量。请记住,数组的第一个元素为0,因此要获得第一个变量,您将调用foos[0],并访问第4个foo,您将调用foos[3]