我在我的表格中声明了一些由按键触发的布尔值。基本上,我想要它,所以当触发if语句时,我的表单中的所有布尔变量都为false 。我在if语句中有以下内容;
//Spike contact
if (pbPlayer.Right > pbSpike1.Left && pbPlayer.Right < pbSpike1.Right && pbPlayer.Bottom > pbSpike1.Top || pbPlayer.Left < pbSpike1.Right && pbPlayer.Left > pbSpike1.Left && pbPlayer.Bottom > pbSpike1.Top)
{
timer1.Stop();
MessageBox.Show("Gameover!");
pbPlayer.Location = ReSpawn;
timer1.Start();
foreach (bool Movement in this.Controls)
{
Movement = false;
}
}
当我尝试将移动设置为false时,它表示它不可分配,因为它是一个foreach迭代。
答案 0 :(得分:1)
我认为最好明确地为成员变量赋值,避免使用容易出错的自动逻辑。
作为选项,您可以使用反射来查找它们,然后设置它们的值
添加using System.Reflection;
,然后使用下面的代码,您可以找到所有非公共布尔成员字段并将其设置为false
:
this.GetType().GetFields(BindingFlags.NonPublic |
BindingFlags.Instance |
BindingFlags.DeclaredOnly)
.Where(x => x.FieldType == typeof(bool))
.ToList()
.ForEach(f =>
{
f.SetValue(this, false);
});
答案 1 :(得分:0)
我看到你正在尝试做什么,但是你却误导foreach
。 foreach
语句适用于数组和集合。表示集合元素的变量必须具有与集合的每个元素匹配的类型。您不能使用foreach过滤集合以查找与您指定的类型匹配的属性。
this.Controls
中的内容必须全部来自System.Windows.Forms.Control
。复选框可以在该集合中,但bool
类型的变量不能,因为bool(确切地说System.Boolean
)不是从System.Windows.Forms.Control
派生的。