我想知道我是否可以缩短它:
bool Check()
{
return textBox1.Text.All(char.IsDigit) ? true : Falsepath();
}
bool Falsepath()
{
MessageBox.Show("The data you entered is incorrect","Error",MessageBoxButtons.OK);
return false;
}
对于这样的事情:
bool Check()
{
return textBox1.Text.All(char.IsDigit) ? true : (sender, e) =>
{
MessageBox.Show("The data you entered is incorrect", "Error", MessageBoxButtons.OK);
return false;
};
}
当然,我输入的第二个代码不正确,但我以它为例。
那么,我可以在检查某些内容时执行代码,还是必须使用单独的功能?
答案 0 :(得分:2)
你可以写:
bool Check()
{
return textBox1.Text.All(char.IsDigit) ?
true :
((Func<bool>)(() =>
{
MessageBox.Show("The data you entered is incorrect", "Error", MessageBoxButtons.OK);
return false;
}))();
}
但是很糟糕,请不要这样做! ......
遗憾的是,在C#中,您必须明确告诉编译器匿名函数的类型。这使一切变得更加复杂。看到演员(Func<bool>)
?在Javascript中你不需要它,事实上在那种语言中它是一种常见的模式。在C#中,并不是因为它不可读且丑陋。
请注意执行匿名方法的最终()
。
请注意,在这种特殊情况下,您可以写:
bool Check()
{
return textBox1.Text.All(char.IsDigit) ?
true :
MessageBox.Show("The data you entered is incorrect", "Error", MessageBoxButtons.OK) == DialogResult.Abort;
}
所以请调用MessageBox.Show()
并以比较为false
的方式比较其结果。
答案 1 :(得分:1)
你真的需要三元运算符吗?
bool Check()
{
if (textBox1.Text.All(char.IsDigit))
{
return true;
}
else
{
MessageBox.Show("The data you entered is incorrect","Error",MessageBoxButtons.OK);
return false;
}
}
答案 2 :(得分:0)
阅读和维护此类代码很痛苦。在顶层你有三元运算符,它被加载到开发人员的大脑(工作记忆)中。然后添加lambda表达式,也应该加载它。然后添加一些通知用户的功能。
所以我需要保持大脑,我在lambda中显示错误对话框 作为三元运算符的一部分的功能,检查是否全部 chars某处是数字。所有这些工作人员都在方法调用中发生 检查某些内容的上下文(您已经处于某些功能的中间位置)。
Average person can keep about 7 things in the working memory.如果您添加更多信息,则会开始忘记以前的数据。为什么要让方法变得如此简单?简单的方法可以让你在大脑中保持更多的高级环境。
另一个问题是混淆方法名称,它应该只检查一些东西。它不应该通知用户或做其他操作。并为方法和控件提供有意义的名称。
bool IsSocialSecurityNumberValid(string ssn)
{
return ssn.All(char.IsDigit);
}
并调用此方法:
if (!IsSocialSecurityNumberValid(ssnTextBox.Text))
MessageBox.Show("SSN should contain only digits", "Error", MessageBoxButtons.OK);