有用的运算符尚未实现

时间:2010-11-01 17:03:58

标签: c# operators

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日

非常感谢。 :)

5 个答案:

答案 0 :(得分:9)

(a but b)  ==  (!a || (a && !b))
           ==  ((!a || a) && (!a || !b))
           ==  (!a || !b)

因此

if (!checkBox.Checked || comboBox.SelectedItem != null) { ... }

我发现这比创建新运算符的可读性差得多。此外,andornot在布尔变量的编程语言中具有良好的意义,但but不是,所以你需要浪费一条线文件解释(a but b) == (!a || !b),而不是a && !ba && 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引起的痛苦相平衡。