繁体   English   中英

使用独占或if语句,C#

[英]Using exclusive or in an if statement, C#

我搜索了网站和谷歌,但无法找到我想要的东西。 我觉得这很简单,但我对C#还不熟悉,所以我遇到了一些麻烦。

基本上,我有一个if语句来测试我所拥有的单选按钮的选择,这是通过单击按钮触发的。 默认情况下,我没有任何选择,如果忘记选择一个MessageBox,我的程序将通知我。 基本上,在做出选择之前,你不能做任何事情。

到目前为止,我只有3个单选按钮,但今天我又增加了一个,还有一些与新单元相关的代码,包括一个新功能。

我还在试图弄清楚什么是最有效的方法来测试radioButton.Check现在,是临时变量,还是我的if语句?

if (pRKButton.Checked != true ^ hexButton.Checked != true ^ binaryButton.Checked != true)
        {
            MessageBox.Show("Choose a method of encryption.");
            return null;
        }
        else....//More Goes Here

我的主要问题是:为什么当我在if语句中添加一个参数时,使用exclusive或者像这样;

if (pRKButton.Checked != true ^ hexButton.Checked != true ^ binaryButton.Checked != true ^ md5Button.Checked != true)

该程序没有注册我点击任何单选按钮。

此时我正在考虑制作一个列表框来保存所有值并选择选项,因为列表会增长。 但我对于无法使用独占或超过3个参数的原因感到非常好奇。 在任何程度上,我都不是数学家,但我更愿意学到更多东西。

在我谈到问题的主要部分之前,我想指出你实际上并不需要在这里使用XOR。 当您有单选按钮时,只能选择零或一个。 选择一个时,同一组中的其他组将自动取消选中。 所以你可以使用|| 测试是否至少选择了一个。

if (pRKButton.Checked || hexButton.Checked || binaryButton.Checked)
{
   // At least one (i.e. exactly one) is checked.
}
else
{
   // None checked.
}

要回答问题的主要部分,您的代码会失败,因为当您选择了一个按钮时,您会得到false ^ true ^ true (注意您正在测试是否取消选中按钮)。 结果是错误的。 但是当你有四个变量时,你会得到false ^ true ^ true ^ true这是真的。

XOR并不意味着“只有一个是真的”,你似乎在思考。 如果A,B,C的奇数为真,则A XOR B XOR C为真。 这与“正好一个”不同,因为如果A,B和C中的所有三个都为真,则为真。

请参阅以下真值表以了解具有三个输入的链式XOR的行为:

XOR B XOR C

除了Mark Byer关于单选按钮功能的良好信息之外,您可能会担心您的代码会因为很长的if语句而变臭。

尝试使用LINQ简化:

container.Controls.OfType<RadioButton>().Any<RadioButton>(r => r.Checked);

根据正在检查的任何单选按钮,将是真还是假。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM