'else if'无法使用TryParse中的变量

时间:2018-11-28 18:29:40

标签: c#

double x;
double y;
string strx = TextBoxX.Text;
string stry = TextBoxY.Text;

if (!double.tryParse(strx, out double a))
    {MessageBox.Show("Incorrect input");}

else if (!double.tryParse(stry, out double b))
    {MessageBox.Show("Incorrect input");}

x = a;
y = b; <---

问题是x和x接收a的值,但是y对b不能做到相同。 我了解它是因为它在'else'内并且可能不会执行,但是如果我删除else,那么如果两个文本框都为空或不是数字,我将得到两个错误弹出窗口...

有任何解决问题的帮助吗?

2 个答案:

答案 0 :(得分:2)

if (!double.TryParse(strx, out double a) || !double.TryParse(stry, out double b))
{
    MessageBox.Show("Incorrect input");
    return;
}

答案 1 :(得分:2)

您应该质疑如何设置逻辑。

现在,如果一个或两个文本框都不正确,则用户会看到模棱两可的“错误输入”。我会感到沮丧。哪里输入不正确?是第一个文本框吗?第二?都是吗?

当您开发更好的UI时,答案将是验证每个文本框,并让每个错误的框变颜色或提供有关表单本身的其他反馈。否则,想象一下当您向用户展示具有20个不同字段的表单时,逻辑将变得多么丑陋。

但是,如果您只打算使用两个字段,并且想要有一些逻辑,请尝试这样的操作(请注意,在这样做时,我也摆脱了else,所以b将始终被设置):

double x;
double y;
string strx = TextBoxX.Text;
string stry = TextBoxY.Text;
List<string>() invalids = new List<string>();

if (!double.tryParse(strx, out double a))
    {invalids.Add("boxX");}

if (!double.tryParse(stry, out double b))
    {invalids.Add("boxY")}

if invalids.Length != 0
    {MessageBox.Show("Incorrect inputs in " + String.Join(", ", invalids.ToArray());}

x = a;
y = b; 

用户会喜欢一个框,该框告诉他们所有错误,而不是多个弹出框,或者每次必须单击确定以查看还有更多错误。