IF语句和bool返回值

时间:2014-09-30 20:44:48

标签: c#

我创建了一个名为CheckValidity的方法,它返回一个bool并接收一个文件名作为字符串。 我使用字符串方法EndsWith来检查文件名的值是否以 .txt 结尾。 如果它不以 .txt 结尾,我想显示一个消息框。如果是的话我想启用和禁用Windows窗体上的几个按钮。 我是c#编程的新手,所以任何帮助都会很棒。

(CheckValidity(ofd.FileName))只有在返回为真时运行,或者只要它收到任何bool返回就会运行吗?

请参阅下面的代码。

private void openFileButton_Click(object sender, EventArgs e)
  {
     OpenFileDialog ofd = new OpenFileDialog();
     ofd.InitialDirectory = (@"C:\");
     ofd.Filter = ("calender|.txt");
     ofd.FileName = "calender.txt";
     ofd.CheckFileExists = false;
     ofd.ShowDialog();

  if (CheckValidity(ofd.FileName))
     {
        enterButton.Enabled = true;
        closeFileButton.Enabled = true;
        openFileButton.Enabled = false;
     }

   }

private static bool CheckValidity(string fileName)
  {

     if (fileName.EndsWith(".txt"))

        return true;

     else
           MessageBox.Show(" Application expects a Text File ");

     return false;

  }

1 个答案:

答案 0 :(得分:3)

  

如何检查CheckValidity方法的返回是否为真   还是假的?根据结果​​使用不同的if语句   bool值返回了吗?

     

只有返回为true时才会运行(CheckValidity(ofd.FileName))   或者只要它收到任何bool返回就会运行

你已经有了正确的想法。布尔可以是真或假。当你检查一个bool的返回值时,你正在检查是否真实,而不是任何bool return 。您需要担心的是true值和false值。

if(CheckValidity(ofd.FileName)) {

}

相当于:

if(CheckValidity(ofd.FileName) == true) {

}
else { // false condition

}

使用bool类型,您不需要明确地将比较写为true,而您的原始代码(没有显式比较)更为习惯,风格更好。

如果您只想检查错误情况,可以写:

if( ! CheckValidity(ofd.FileName) ) {

}

PS:因为你问过任何bool返回,你唯一需要考虑的第三个返回值是使用可空类型(bool?或{{1} })也可以包含空引用。你不用担心;您使用的普通Nullable<bool>是值类型,不能为空。

对于我最初答案的贬低者,我明确地将比较结果写出来向OP解释。

我觉得这个问题不清楚。我引用的摘录表明OP被bool的语义混淆了,所以我试图清楚地说明bool返回类型如何适合if / else语句。这里的关键是(1)else {}块,以及(2)if(func())来说明他编写的代码已经检查为true,并且通过添加一个else来处理== true条件。从根本上说,我觉得OP误解的部分是我试图通过插图中的样式违规解决的部分。虽然我同意它的风格很差,但那是无关紧要的。

对于OP来说,false是一种糟糕的风格并且强烈反对的原因是(1)罗嗦/笨拙而且(2)在允许逻辑表达式内的赋值的语言中打开你的逻辑直到年龄错误;一个常见的错字是if(foo == true)这是合法的,如果你不关注编译器警告,往往不会被发现。如果您只是使用if(foo = true),则无法输入拼写错误。