c# - 我可以在返回值时执行代码吗?

标签 c# lambda return

我想知道我是否可以缩短它:

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;
                };
        }

当然,我输入的第二个代码是不正确的,但我以它为例。

那么,我可以在检查某些内容时执行代码还是必须使用单独的函数?

最佳答案

你可以这样写:

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# 中,您必须显式地告诉编译器匿名函数的类型。这使一切变得更加复杂。看 Actor (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 的方式比较其结果.

关于c# - 我可以在返回值时执行代码吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30142071/

相关文章:

c# - 如何在没有流或系统 io 的情况下压缩字节数组

c# - 窗口点打开方法出现下载 csv 文件时页面无法显示的问题

java - Comparator.comparing 使用嵌套对象的字段对列表进行排序

jquery - jQuery最后返回的到底是什么?

javascript - 有什么方法可以判断 javascript 函数是否已返回?

c# - MVVMCross - 跨应用程序共享业务逻辑

c# - 在线程程序中使用锁定机制是否相当于同步执行代码而不是异步执行代码?

c++ - 将 lambda 函数作为参数传递时没有匹配函数错误

java - 如何在我想要返回的方法中从 lambda 返回值?

python - 如何在Python中打印方法的返回值?