从我不应该得到的方法中获取错误代码

本文关键字:方法 获取 错误代码 不应该 | 更新日期: 2023-09-27 17:49:45

在我的代码的这两个部分中,我似乎错误地调用或误用了代码。我明白是什么原因导致程序在调试时给我IsOperator错误消息。奇怪的是+操作符可以工作,而其他操作符都不能。

public bool IsValidData()
{  
    return
        IsPresent(txtOperand1, "Operand 1") &&
        IsDecimal(txtOperand1, "Operand 1") &&
        IsWithinRange(txtOperand1, "Operand 1", 0, 1000000) &&
        IsPresent(txtOperator, "Operator") &&
        IsOperator(txtOperator, "+, -, *, /") &&
        IsPresent(txtOperand2, "Operand 2") &&
        IsDecimal(txtOperand2, "Operand 2") &&
        IsWithinRange(txtOperand2, "Operand 2", 0, 1000000);
}
public bool IsOperator(TextBox textBox, string operators)
{
    try
    {
        foreach (string s in operators.Split(new char[] { ',' }))
        {
            if (textBox.Text.Trim() == s)
                return true;
            else
                throw new ArgumentException("The operator must be a valid operator: +,-, *, /", "name");
        }
        return true;
    }
    catch (ArgumentException ex)
    {
        MessageBox.Show(ex.Message);
        txtOperator.Focus();
        return false;
    }
}

从我不应该得到的方法中获取错误代码

您的操作符列表中包含空格:

"+, -, *, /"

这会导致意外的行为。试一试:

"+,-,*,/"

或者,防御性地修改s变量…

您正在修剪文本输入,但不是与之比较的操作符,因此如果s包含空格,if (textBox.Text.Trim() == s)将永远不会为真。

同时,您将根据操作符列表检查文本—如果它与第一个操作符不匹配,它也将失败,因为一旦该比较失败,您将抛出参数异常。

例如,您的文本框包含*,您的第一个操作符是+:

if ("*" == "+") // FAIL

我的建议编辑-只有在你检查完它们之后才失败:

    foreach (string s in operators.Split(new char[] { ',' }))
    {
        if (textBox.Text.Trim() == s.Trim()) {
            return true;
        }
    }
    MessageBox.Show("The operator must be a valid operator: " + operators);
    txtOperator.Focus();
    return false;

可以使用Array。

public bool IsOperator(TextBox textBox, string operators)
{
    string[] operatorArray = operators.Split(new char[] { ',' });
    if (Array.IndexOf(operatorArray, textBox.Text.Trim()) >= 0) {
        return true;
    } else {
        MessageBox.Show("The operator must be a valid operator: +,-, *, /");
        textBox.Focus();
        return false;
    }
}

注意:操作符必须像"+"、"-"、"*"、"/"一样,嵌入在操作符字符串中的空格可能会中断此函数。