C# 使用变量名作为foreach迭代变量,并将其设置为';s值

C# 使用变量名作为foreach迭代变量,并将其设置为';s值,c#,list,C#,List,我有四个布尔变量。我已经初始化了列表radioBtns,其中每个变量的名称都是字符串 我想循环遍历列表中的每个字符串,并将每个布尔变量(每个变量都与强变量同名)设置为true 但我收到了以下错误: 无法分配给“Btn”,因为它是“foreach迭代变量” bool Q1Button1\u True、Q2Button1\u True、Q3Button1\u True、Q4Button1\u True; List radioBtns=新列表(新字符串[]{“Q1Button1_True”、“Q2Bu

我有四个布尔变量。我已经初始化了列表
radioBtns
,其中每个变量的名称都是字符串

我想循环遍历列表中的每个字符串,并将每个布尔变量(每个变量都与强变量同名)设置为
true

但我收到了以下错误:

无法分配给“Btn”,因为它是“foreach迭代变量”

bool Q1Button1\u True、Q2Button1\u True、Q3Button1\u True、Q4Button1\u True;
List radioBtns=新列表(新字符串[]{“Q1Button1_True”、“Q2Button1_True”、“Q3Button1_True”、“Q4Button1_True”});
foreach(无线基站中的字符串基站)
{
Btn=真;
}

您可以使用反射来实现这一点,但对于这种场景来说,这可能有些过分

如果您只是简单地将所有变量设置为true,那么您可能只需要在源代码上设置它们

bool Q1Button1\u True=True;
bool Q2Button1_True=True;
bool Q3Button1_True=True;
bool Q4Button1_True=True;
另外,如果这是一个会增长的东西,比如说Q
n
,那么您可能需要一个数组,其中您将使用
qbutton1\u True
而不是
Button1\u True[1]

我假设您将在应用程序的多个部分中执行此操作,因此使用一些“动态”设置器可能是一个明智的选择。在这种情况下,可以使用反射:

bool Q1Button1\u True、Q2Button1\u True、Q3Button1\u True、Q4Button1\u True;
List radioBtns=新列表(新字符串[]{“Q1Button1_True”、“Q2Button1_True”、“Q3Button1_True”、“Q4Button1_True”});
foreach(无线基站中的字符串基站)
{
bool buttonVar=this.GetType().getProperty(Btn).getValue(this,null);
buttonVar=true;
}
另一种方法是使用如下内容:

bool Q1Button1\u True、Q2Button1\u True、Q3Button1\u True、Q4Button1\u True;
List radioBtns=新列表(新字符串[]{“Q1Button1_True”、“Q2Button1_True”、“Q3Button1_True”、“Q4Button1_True”});
foreach(无线基站中的字符串基站)
{
PropertyInfo buttonVar=this.GetType().GetProperty(Btn);
buttonVar.SetValue(this,true,null);
}

希望这有帮助

应该使用数组,而不是四个不同的变量:

bool[] QButton_True = new bool[4];
for (int i = 0 ; i < 4 ; i++) {
    QButton_True[i] = true;
}
bool[]QButton_True=新bool[4];
对于(int i=0;i<4;i++){
qu-True[i]=真;
}

与其将它们称为
Q1Button\u True
Q2Button\u True
…,不如将它们称为
QButton\u True[0]
QButton\u True[1]

此代码毫无意义<代码>Btn是一个字符串,而不是布尔值。你想干什么?正如错误所说,
Btn
是迭代变量,而不是可以赋值的东西。它提供了当前的列表项,它不是一个可以存储您自己数据的地方。请描述您想要实现什么?我想将所有布尔值设置为true。您使用的代码没有这样做。这些变量是从哪里来的?为什么不在声明中将它们设置为true呢?@代码用户您一直在描述您尝试的解决方案,而不是实际的问题。一个简单的
bool[]
数组就足够了。获取4个可设置为真或假的布尔值。清扫者的回答显示了这是多么容易,相反,事实并非如此。这是XY问题的完美例子。当人们可以在声明期间设置变量时,没有理由这样设置变量。或者在布尔阵列上使用一个循环这是一个完美的使用案例,用于一个简单的
for
loop@PanagiotisKanavos你说得对,不过我给了他一个将来可能更有用的方法。根据经验,这种类型的请求通常在有人实现ORM时出现,在这种情况下,反射是一种方法。@ZektorH不过,反射如何比简单的循环更好呢?
bool[] QButton_True = new bool[4];
for (int i = 0 ; i < 4 ; i++) {
    QButton_True[i] = true;
}