kng*_*158 3 c# checkbox enums loops for-loop
我有一组复选框,准确地说有 3 个复选框。它在使用 if 语句时对我有用,但我想知道有一种方法可以遍历复选框并在选中或更多复选框时分配枚举值。
代码如下所示:
if (chkTomato.Checked && !chkLettuce.Checked && !chkCarrot.Checked)
{
cart.VegChosen = Veggies.Tomato;
}
else if (!chkTomato.Checked && chkLecctuce.Checked && !chkCarrot.Checked)
{
cart.VegChosen = Veggies.Lecctuce;
}
else if (!chkTomato.Checked && !chkLecctuce.Checked && chkCarrot.Checked)
{
cart.VegChosen = Veggies.Carrot;
}
else if (chkTomato.Checked && chkLettuce.Checked && chkCarrot.Checked)
{
cart.VegChosen = Veggies.All;
}
else if (chkTomato.Checked && chkLettuce.Checked && !chkCarrot.Checked)
{
cart.VegChosen = Veggies.TomatoAndLettuce;
}
else if (chkTomato.Checked && !chkLettuce.Checked && chkCarrot.Checked)
{
cart.VegChosen = Veggies.TomatoAndCarrot;
}
else if (!chkTomato.Checked && chkLettuce.Checked && chkCarrot.Checked)
{
cart.VegChosen = Veggies.LettuceAndCarrot;
}
else
{
cart.VegChosen = Veggies.None;
}
Run Code Online (Sandbox Code Playgroud)
我想找到一种方法来循环它,以防只有 3 个复选框,if 语句会很长。
谢谢!
虽然这不使用循环,但我希望这就是您想要实现的目标。假设您的枚举声明如下:
[Flags]
public enum Veggies
{
None = 0,
Tomato = 1,
Lettuce = 2,
Carrot = 4,
TomatoAndLettuce = Tomato | Lettuce,
TomatoAndCarrot = Tomato | Carrot,
LettuceAndCarrot = Lettuce | Carrot,
All = Tomato | Lettuce | Carrot
}
Run Code Online (Sandbox Code Playgroud)
然后您应该能够使用类似的按位方法来分配值:
Veggies selectedVeggies = Veggies.None;
if (chkTomato.Checked)
{
selectedVeggies = selectedVeggies | Veggies.Tomato;
}
if (chkLettuce.Checked)
{
selectedVeggies = selectedVeggies | Veggies.Lettuce;
}
if (chkCarrot.Checked)
{
selectedVeggies = selectedVeggies | Veggies.Carrot;
}
cart.VegChosen = selectedVeggies;
Run Code Online (Sandbox Code Playgroud)
这样做的最终结果将与您当前的一组 if 语句相同。我们使用 1、2、4 等作为枚举值的原因是因为它们在以二进制呈现时没有重叠(1 是 001、2 是 010、4 是 100 等),因此特定位可以只识别那个枚举值。
另请注意,诸如TomatoAndLettuce和 之TomatoAndCarrot类的声明可能也是不必要的,因为您可以使用Enum.HasFlag()。
例如:
Veggies selectedVeggies = Veggies.None;
if (chkTomato.Checked)
{
selectedVeggies = selectedVeggies | Veggies.Tomato;
}
if (chkLettuce.Checked)
{
selectedVeggies = selectedVeggies | Veggies.Lettuce;
}
if (chkCarrot.Checked)
{
selectedVeggies = selectedVeggies | Veggies.Carrot;
}
cart.VegChosen = selectedVeggies;
Run Code Online (Sandbox Code Playgroud)
进一步阅读:按位或 | 是什么意思?运营商做什么?
| 归档时间: |
|
| 查看次数: |
81 次 |
| 最近记录: |