c#变量赋值

本文关键字:赋值 变量 | 更新日期: 2023-09-27 18:07:12

有人能告诉我一个简单的方法来分配变量。我有很多变量,不知道怎么做,是否可以使用循环?'

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];             
            ...
}

c#变量赋值

您需要使用反射来通过名称获取属性/字段的名称。假设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_的单个属性加上当前索引。

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

编辑:然而,有这么多相同名称和类型的属性似乎是一个设计缺陷,您应该考虑您的实际设计。

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

您可以将引用变量添加到数组中并遍历它们。这在清除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];

但是越界索引很容易创建


也可以使用反射