c# - '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,那么如果两个文本框都是空的或者不是数字,我会得到两个错误弹出窗口......
任何帮助解决问题?
解决方案
你应该质疑你的逻辑是如何设置的。
现在,如果一个或两个文本框都错了,用户会看到模棱两可的“输入错误”。我会觉得这很令人沮丧。输入错误在哪里?它是第一个文本框吗?第二?两个都?
当您开发更好的 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 才能看到更多错误。
推荐阅读
- c++ - 在 C++ 中循环遍历 .txt 文件的行
- javascript - MongoDB服务器。过期时如何自动更改已过期状态
- twilio - twilio REST API:严格的后端?
- python - pylint 为可调用的对象属性给出不可调用错误
- web-crawler - 如何限制重复的类似网址抓取
- amazon-web-services - AWS - 您如何在 lambda 进程之间共享访问令牌?
- r - node.js 已安装但仍然在 RInno 中收到投诉
- r - R:拆表以减少维度
- ios - 是否有可能在用户松开手指之前放弃对 UISwitch 元素的控制?
- authentication - 在 Kerberos 数据库中找不到服务器 -ERR_S_PRINCIPLE_UNKNOWN(7)