C#中的but
运算符在C#中是否有空间?
即:
if (checkBox.Checked but comboBox.SelectedItem == null) { ... }
而不是
if (checkBox.Checked == false || (checkBox.Checked && comboBox.SelectedItem != null)) { ... }
哪些其他当前不存在的运算符可以用来节省输入不太可读的语句?
更新
KennyTM向我建议的but
运营商发布了一个excellent alternative,但它有点遗漏了这一点。我知道现有的运算符可以组合起来创建任何表达式,我只是想知道我的代码表达我的意图有多好。
即。 “如果未选中复选框或未选中任何内容”不扫描完全以及“如果选中复选框但未选择任何内容”
更新2:
只是对那些说“和”与“但”相同的人的更新。虽然我同意逻辑上这是正确的(我不会重新打开这个问题)但我想与你分享一个引用,这表明“和”之间的选择和“但是”有时会产生很大的不同:
Had a curry for lunch in our customers canteen. It looked a bit like cat sick but it was quite tasty.
Phil Winstanley - 2011年2月22日
非常感谢。 :)
答案 0 :(得分:9)
(a but b) == (!a || (a && !b))
== ((!a || a) && (!a || !b))
== (!a || !b)
因此
if (!checkBox.Checked || comboBox.SelectedItem != null) { ... }
我发现这比创建新运算符的可读性差得多。此外,and
,or
,not
在布尔变量的编程语言中具有良好的意义,但but
不是,所以你需要浪费一条线文件解释(a but b) == (!a || !b)
,而不是a && !b
或a && b
给每个人。这不值得。
答案 1 :(得分:4)
什么阻止你写一个But Extension方法?
public static bool But(this bool original, bool secondExpression)
{
return original || (original && secondExpression));
}
在我看来这是更好的,因为它促进INTO编程语言而不是仅使用一种语言。
答案 2 :(得分:2)
我认为“但”意味着与“和”相同!例如。 “我喜欢C#但我讨厌C ++”意味着“我喜欢C#而我讨厌C ++”。它们都是连词(连接语句)。
在您的示例中,您肯定只希望在检查组合框但没有选中项目的情况下执行if语句的主体?这意味着要进行归档,必须检查组合框;即: checkBox.Checked&& comboBox.SelectedItem == null
因此,我认为你应该转化为什么的例子是不正确的。
我的C#生锈了,但是如果有一种方法可以在C#中定义像宏这样的东西,你可以将“but”定义为“&&”的别名,但我认为它会产生很少的好处。 / p>
答案 3 :(得分:1)
如果我们从这里开始,它会在哪里结束。但是,如果你喜欢这样的话,也许Boo适合你。这允许您添加自己的语法。
答案 4 :(得分:0)
在Perl中,你可以写:
if ($checkBox.Checked) doSomething() unless (!$comboBox.SelectedItem);
就个人而言,我非常赞成更具表现力的语言,但这必须与TMTOWTDI引起的痛苦相平衡。