2012-08-07 60 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]