猿问

使用变量名称作为 foreach 迭代变量并设置其值

我有四个布尔变量。我已将列表初始化radioBtns为每个变量的名称作为字符串。


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


我收到这个错误:


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


bool Q1Button1_True, Q2Button1_True, Q3Button1_True, Q4Button1_True;


List<string> radioBtns = new List<string>(new string[] { "Q1Button1_True", "Q2Button1_True", "Q3Button1_True", "Q4Button1_True" });


foreach (string Btn in radioBtns)

{

   Btn = true;

}


白猪掌柜的
浏览 291回答 2
2回答

宝慕林4294392

您应该使用数组而不是四个不同的变量:bool[] QButton_True = new bool[4];for (int i = 0 ; i < 4 ; i++) {&nbsp; &nbsp; QButton_True[i] = true;}您不要将它们称为Q1Button_True, Q2Button_True... ,而是将它们称为QButton_True[0], QButton_True[1]...

慕娘9325324

您可以为此使用反射,但对于这种情况,它可能有点过分了。如果您只是将所有变量设置为 true,您可能只想将它们设置在源上。bool Q1Button1_True = true;bool Q2Button1_True = true;bool Q3Button1_True = true;bool Q4Button1_True = true;另外,如果这是一个会增长的东西,让我们对 Q 说,n那么你可能想要一个数组,而不是Q1Button1_True你会拥有Button1_True[1].我假设您将在应用程序的多个部分中执行此操作,因此拥有一些“动态”设置器可能是明智的选择。在这种情况下,您可以使用反射:bool Q1Button1_True, Q2Button1_True, Q3Button1_True, Q4Button1_True;List<string> radioBtns = new List<string>(new string[] { "Q1Button1_True", "Q2Button1_True", "Q3Button1_True", "Q4Button1_True" });foreach (string Btn in radioBtns){&nbsp; &nbsp;bool buttonVar = this.GetType().getProperty(Btn).getValue(this, null);&nbsp; &nbsp;buttonVar = true;}另一种方法是使用类似这样的东西:bool Q1Button1_True, Q2Button1_True, Q3Button1_True, Q4Button1_True;List<string> radioBtns = new List<string>(new string[] { "Q1Button1_True", "Q2Button1_True", "Q3Button1_True", "Q4Button1_True" });foreach (string Btn in radioBtns){&nbsp; &nbsp;PropertyInfo buttonVar = this.GetType().GetProperty(Btn);&nbsp; &nbsp;buttonVar.SetValue(this, true, null);}
随时随地看视频慕课网APP
我要回答