2016-09-16 196 views
0

有人能告诉我一个简单的方法来分配变量。 我有很多变量,真的不知道该怎么办,是否有可能使用一个循环?`C#变量赋值

public void SwappingPlaces1() 
     {   
      Section_1[0] = Receiver_1[0]; 
      Section_1[1] = Receiver_2[0]; 
      Section_1[2] = Receiver_3[0]; 
      Section_1[3] = Receiver_4[0]; 
      Section_1[4] = Receiver_5[0]; 
      Section_1[5] = Receiver_6[0]; 
      Section_1[6] = Receiver_7[0]; 
      Section_1[7] = Receiver_8[0]; 
      Section_1[8] = Receiver_9[0]; 
      Section_1[9] = Receiver_10[0]; 
      Section_1[10] = Receiver_11[0]; 
      Section_1[11] = Receiver_12[0]; 
      Section_1[12] = Receiver_13[0]; 
      Section_1[13] = Receiver_14[0]; 
      Section_1[14] = Receiver_15[0]; 
      Section_1[15] = Receiver_16[0]; 
      Section_1[16] = Receiver_17[0]; 
      Section_1[17] = Receiver_18[0]; 
      Section_1[18] = Receiver_19[0]; 
      Section_1[19] = Receiver_20[0]; 
      Section_1[n] = Receiver_n[0];    
      ... 
} 
+0

使用for循环。 – Mahdi

+7

奇怪的代码,为什么当他们是数组时,为什么有这么多不同的'Receiver []'? –

+0

拥抱OO。你应该创建类来清理混乱。 –

回答

0

你可以添加引用变量数组,并在它们之间迭代。 这主要是有用的,清除GUI控件,比如文本框/标签等

var variables = new[] { Receiver_1, Receiver_2, Receiver_3, Receiver_4, 
         Receiver_5, Receiver_6 }; 

for(int i=0; i<Section_1.Length;i++) 
    Section_1[i] = variables[i][0]; 

但是,一个索引越界被easely创建


您也可以使用反射。

1

您需要使用反射以按名称获取属性/字段的名称。假设Reciever_n是一个属性:

var properties = this.GetType().GetProperties(); 
for(int i = 0; i < n; i++) 
{ 
    var p = properties.Single(x => x.Name == "Receiver_" + i); 
    var value = p.GetValue(this, new object[] { 0 }); 
} 

首先,你得到的类型定义的所有属性。现在你循环你的列表并获得名称Receiver_加上当前索引的单一属性。

最后你在实例上调用该属性并提供索引属性的索引(在这里等于零)。

编辑:但是有这么多属性与平等的名称和类型似乎是一个设计缺陷,你应该考虑你的实际设计。

因此,更好的方法可能是只有一个单一的二维数组Receiver

+3

我不知道为什么有经验的开发人员总是建议反思新手。反思往往表明设计缺乏。为什么他有许多不同的'Receiver []',但只使用第一个索引。我想一个阵列就足够了。或者可能是一个'Dictionary '或类似的东西。但反思是错误的。 –

+0

@TimSchmelter公平点。反思并不意味着一个糟糕的设计,然而在这种情况下,这个结论可能适用。 – HimBromBeere