首页 > 解决方案 > 'else if' 不能使用 TryParse 中的变量

问题描述

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 和接收 a 的值,但 y 不能为 b 做同样的事情。我理解它,因为它在“else”中并且可能不会被执行,但是如果我删除了 else,那么如果两个文本框都是空的或者不是数字,我会得到两个错误弹出窗口......

任何帮助解决问题?

标签: c#

解决方案


你应该质疑你的逻辑是如何设置的。

现在,如果一个或两个文本框都错了,用户会看到模棱两可的“输入错误”。我会觉得这很令人沮丧。输入错误在哪里?它是第一个文本框吗?第二?两个都?

当您开发更好的 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; 

与多个弹出框相比,用户将享受一个告诉他们所有错误的框,或者每次都必须点击 OK 才能看到更多错误。


推荐阅读