【问题标题】:Why does VS keep insisting that another right paren is expected?为什么 VS 一直坚持要求另一个正确的括号?
【发布时间】:2012-05-06 16:13:06
【问题描述】:

这段代码:

private bool ValToEnterIsValid(string ACandidateVal) {
  return ((ACandidateVal == "1") && (!String.IsNullOrWhiteSpace(textBoxPhoneNum1.Text)) ||
         ((ACandidateVal == "2") && (!String.IsNullOrWhiteSpace(textBoxPhoneNum2.Text)) ||
     ((ACandidateVal == "3") && (!String.IsNullOrWhiteSpace(textBoxPhoneNum3.Text));
}

...以及这段代码:

private bool ValToEnterIsValid(string ACandidateVal) {
  return (((ACandidateVal == "1") && (!String.IsNullOrWhiteSpace(textBoxPhoneNum1.Text)) ||
          ((ACandidateVal == "2") && (!String.IsNullOrWhiteSpace(textBoxPhoneNum2.Text)) ||
      ((ACandidateVal == "3") && (!String.IsNullOrWhiteSpace(textBoxPhoneNum3.Text)));
}

...导致 VS 说,“)预期” - 无论我添加多少正确的括号,试图幽默它!

【问题讨论】:

  • 从左边开始。每次看到 (,请举起手指。当您看到 ) 时,请放下手指。如果您在没有抬起手指时尝试降低手指,则说明您有太多关闭的括号。如果你完成了,但你的手指仍然抬起,那么你的括号太少了。
  • +1 因为trying to humor it! 让我发笑。
  • 这基本上是我通常所做的,但无论出于何种原因,我在那里遇到了一个“盲点”......我通常只是对自己数数:1、2、1、2、1、0 -啊!或者……哦,不!这次我的“哦,不”让我失望了。
  • 这样的代码很难阅读并且很容易出错(因此这里的帖子试图找出它为什么不起作用)。我建议将每个条件分解成它自己的行并像这样进行评估。它使代码在以后更易于编写、维护和故障排除。

标签: c# boolean


【解决方案1】:

每一行的括号是不平衡的。此外,由于优先级的工作方式,您有多余的括号;我会把它写成

private bool ValToEnterIsValid(string ACandidateVal) {
  return (ACandidateVal == "1" && !String.IsNullOrWhiteSpace(textBoxPhoneNum1.Text)) ||
         (ACandidateVal == "2" && !String.IsNullOrWhiteSpace(textBoxPhoneNum2.Text)) ||
         (ACandidateVal == "3" && !String.IsNullOrWhiteSpace(textBoxPhoneNum3.Text));
}

另外,您使用三个变量而不是数组是否有原因?

【讨论】:

  • 哦,呃,我忘记了 IsNullOrWhiteSpace() 爵士乐!
【解决方案2】:

您似乎在 if 的每个部分都缺少一个 ):

private bool ValToEnterIsValid(string ACandidateVal) {
  return (( (ACandidateVal == "1") && 
            (!String.IsNullOrWhiteSpace(textBoxPhoneNum1.Text)) ) ||
          ( (ACandidateVal == "2") && 
            (!String.IsNullOrWhiteSpace(textBoxPhoneNum2.Text)) ) ||
          ( (ACandidateVal == "3") && 
            (!String.IsNullOrWhiteSpace(textBoxPhoneNum3.Text)) )
         );
}

【讨论】:

    【解决方案3】:

    您在每个 !String.IsNullOrWhiteSpace 比较的末尾缺少额外的“)”:

    此代码有效:

            private bool ValToEnterIsValid(string ACandidateVal) {
              return (
                  (ACandidateVal == "1") && (!String.IsNullOrWhiteSpace(textBoxPhoneNum1.Text)) ||
                  (ACandidateVal == "2") && (!String.IsNullOrWhiteSpace(textBoxPhoneNum1.Text)) ||
                  (ACandidateVal == "3") && (!String.IsNullOrWhiteSpace(textBoxPhoneNum1.Text))
                 );
            }
    
            private bool ValToEnterIsValid(string ACandidateVal) {
              return (
                  ((ACandidateVal == "1") && (!String.IsNullOrWhiteSpace(textBoxPhoneNum1.Text))) ||
                  ((ACandidateVal == "2") && (!String.IsNullOrWhiteSpace(textBoxPhoneNum2.Text))) ||
                  ((ACandidateVal == "3") && (!String.IsNullOrWhiteSpace(textBoxPhoneNum3.Text)))
                  );
            }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-12-30
      • 2021-12-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多