【问题标题】:Expression-bodied method: Return nothing表达式主体方法:不返回任何内容
【发布时间】:2016-10-21 10:22:26
【问题描述】:

当我发现一个实际上什么都不做的方法时,我正在将我们的一个项目更新到 C# 6.0:

private void SomeMethod()
{
    return;
}

现在我想知道是否有可能将其重写为表达式主体方法,因为它只包含return

尝试 1:

private void SomeMethod() => return;

例外情况:

  1. ;预计

  2. 类、结构或接口成员声明中的标记“return”无效

  3. 无效的表达式术语'return'

尝试 2:

private void SomeMethod() => ;

例外:

  1. 无效的表达式术语';'

有没有可能实现这一点(尽管这种方法实际上没有意义)?

【问题讨论】:

    标签: c# c#-6.0


    【解决方案1】:

    这不是表达式体,但你可以这样做:

    private void SomeMethod() { }
    

    【讨论】:

    • 你的第二个例子抛出异常'Invalid expression term '{''。
    • @diiN_ 我的错。我认为语法与 lambdas 相同,但显然不是
    • 我注意到你可以这样做:private void NOPMethod(){} private void SomeMethod() => NOPMethod();
    【解决方案2】:

    什么都不做的方法仍然有意义——它们什么都不做。

    你可能会丢失return语句:

      private void SomeMethod() { }
    

    或者assign a function to a variable 代替:

      private Action SomeMethod = () => { };
    

    【讨论】:

    • 您的第二个示例无法编译。 private Action SomeMethod = () => { }; 可以,但我认为这是个坏主意。
    • 谢谢,我已经更新了答案。是的,这是个坏主意,我以前从未做过,而且猜错了。
    • 我注意到你可以这样做:private void NOPMethod(){} private void SomeMethod() => NOPMethod();
    【解决方案3】:

    如果你真的想在 void 函数上为 body 做表达式,你可以这样做:

    private void SomeFunction() => Expression.Empty();
    

    这使用 Linq 并创建一个具有 Void 类型的空表达式。

    【讨论】:

      猜你喜欢
      • 2019-08-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-23
      • 2020-01-26
      • 2018-10-21
      • 2011-01-20
      相关资源
      最近更新 更多