我的If语句有问题吗?

时间:2014-01-05 19:22:36

标签: c# if-statement boolean logic boolean-logic

此函数检查文本框中的值是否可解析。在下面的方法中调用此方法。

    private bool CheckForInvalidEntries()
    {
        bool ParseIsSuccessfull; int result; //These 2 variables are for trying to parse the entries in the Stat text boxes
        bool ContainsInvalidEntry = false;

        if ((ParseIsSuccessfull = int.TryParse(P1STRtextbox.Text, out result)) == false)
        {
            ContainsInvalidEntry = true;
        }
        else if ((ParseIsSuccessfull = int.TryParse(P1DEXtextbox.Text, out result)) == false)
        {
            ContainsInvalidEntry = true;
        }
        else if ((ParseIsSuccessfull = int.TryParse(P1VIGtextbox.Text, out result)) == false)
        {
            ContainsInvalidEntry = true;
        }
        else if ((ParseIsSuccessfull = int.TryParse(P1RMtextbox.Text, out result)) == false)
        {
            ContainsInvalidEntry = true;
        }
        else if ((ParseIsSuccessfull = int.TryParse(P1BMtextbox.Text, out result)) == false)
        {
            ContainsInvalidEntry = true;
        }
        else ContainsInvalidEntry = false;


        return ContainsInvalidEntry;
    }

此功能是单击过程统计点按钮的事件

    private void p1ProcessPointsBtn_Click(object sender, EventArgs e)
    {
        bool EntriesAreInvalid = new bool();

        EntriesAreInvalid = CheckForInvalidEntries();

        if (EntriesAreInvalid == true)
        {
            P1STRtextbox_TextChanged(sender, e);
            P1DEXtextbox_TextChanged(sender, e);
            P1VIGtextbox_TextChanged(sender, e);
            P1RMtextbox_TextChanged(sender, e);
            P1BMtextbox_TextChanged(sender, e);

        }
        else
        {
            MessageBox.Show("Success");
        }

The frame Im having problems with

功能:当用户按下“处理统计点”按钮时,程序会检查是否能够解析5个文本框中的条目(在CheckForInvalidEntries方法中)。然后它将bool值返回到EntriesAreInvalid变量(在p1ProcessPointsBtn_Click方法中)。如果条目不可解析,请执行操作A,如果条目是可解析的,请执行操作B.

问题:如果这些数字在所有文本框中都是可分析的,我就不会得到结果。我只得到文本框不可解析的结果。我认为它与“CheckForInvalidEntries”方法中的if语句有关。我该怎么做才能解决我的问题。非常感谢您的时间和精力!

3 个答案:

答案 0 :(得分:1)

如果转换失败,TryParse会将Result设置为零。由于您一直在调用TryParse,因此请继续重置结果。

如果您只想检查解析错误,这应该有效:

ContainsInvalidEntry = false;
ContainsInvalidEntry |= !int.TryParse(P1STRtextbox.Text, out result));
ContainsInvalidEntry |= !int.TryParse(P1DEXtextbox.Text, out result));
ContainsInvalidEntry |= !int.TryParse(P1VIGtextbox.Text, out result));
ContainsInvalidEntry |= !int.TryParse(P1RMtextbox.Text, out result));
ContainsInvalidEntry |= !int.TryParse(P1BMtextbox.Text, out result));
return ContainsInvalidEntry;

除此之外:比较布尔值为true和false有点(请原谅双关语。)奇怪。 if ( ( ParsedOkay == ( false ) ) )可能有效,但if ( !ParsedOkay )更为常见。

答案 1 :(得分:1)

我对你的代码感到困惑。但我认为这会对你有所帮助。如果我说得对,你想检查文本框中的所有文本是否可以解析为int。如果它是这样你想打印出“成功”;

private bool isParsable(TextBox t) //takes a TextBox as paramater and returns true if
    {                              // its parsable
        int i = 4;
        if (int.TryParse(t.Text, out i) == true)
            return true;
        else
            return false;            
    }

    private void Button_Click(object sender, RoutedEventArgs e)
    {
        if(isParsable(tbox1) == true && isParsable(tbox2) == true) //if every textbox
        {                                                          //is parsable print
            tblock1.Text = "succes";
        }
        else
        {
            tblock1.Text = "error";
        }
    }

答案 2 :(得分:0)

首先,你不需要写这样的if语句,它太杂乱而且没必要。复杂的代码总是容易出错,

而不是:

 if ((ParseIsSuccessfull = int.TryParse(P1STRtextbox.Text, out result)) == false)

你可以写:

if(!int.TryParse(P1STRtextbox.Text, out result))

因为TryParse已经返回了一个bool结果。如果你想检查它是否为假只是把你的语句开头的否定运算符(!)。您还可以编写一个简单的方法来检查您的文本是否可以解析:

static bool CheckForParse(params string[] values) 
{
   int x;
   if(values.Lenght > 0)
   {
       for(int i=0; i<values.Lenght;i++)
       {
          if(!int.TryParse(values[i], x)) return false;
       }
       return true;

    } else { return false }

    return false;
}

你可以这样称呼它:

bool result = CheckForParse(P1STRtextbox.Text,
                            P1DEXtextbox.Text,
                            P1VIGtextbox.Text,
                            P1RMtextbox.Text,
                            P1BMtextbox.Text);
if(result)
{
   P1STRtextbox_TextChanged(sender, e);
   P1DEXtextbox_TextChanged(sender, e);
   ...
}