从我不应该得到的方法中获取错误代码
本文关键字:方法 获取 错误代码 不应该 | 更新日期: 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;
}
}
注意:操作符必须像"+"、"-"、"*"、"/"一样,嵌入在操作符字符串中的空格可能会中断此函数。