【问题标题】:=> Lambda expression in global variable [duplicate]=>全局变量中的Lambda表达式[重复]
【发布时间】:2016-04-03 14:00:55
【问题描述】:

看起来他正试图将全局“值”设置为构造函数中的一个字段。

这可能吗?

public class TestLambda
{
    private bool value => inputValue == null;

    public TestLambda(string inputValue)
    {
        // do stuff

    }
}

【问题讨论】:

  • inputValuevalue 的初始化程序中使用的 inputValue 与在 TestLambda 构造函数中使用的不同。
  • 按原样,代码不会编译,因为inputValue 不存在于value 的范围内。

标签: c# lambda c#-6.0


【解决方案1】:

是的,这是表达式体函数成员的有效 C# 6 语法,因为 inputValue 是您类中的一个字段。

public class TestLambda
{
    private string inputValue; // necessary

    private bool value => inputValue == null;

    public TestLambda(string inputValue)
    {
        this.inputValue = inputValue;

    }
}

可以在Roslyns 'New Language Features in C# 6'上找到。

【讨论】:

  • 为了完整起见,您可以发布这是简写语法的完整属性。
  • 基本上就是代码。出于安全目的,我无法发布实际代码,但这是他在两周前离开之前所做的 GUI 表单更改。他是一个 c#“专家”,并且总是“更新”我们的代码,如果它不稳定,我们不得不重写它的整个部分。 #6可能是答案。他可能在没有告诉任何人的情况下升级到了开发环境。
【解决方案2】:

这是表达式主体属性的 C# 6 语法。这是一个 get-only 属性,返回 inputValue == null

C# 5 及以下等效版本是

private bool value
{
    get { return inputValue == null; }
}

【讨论】:

    【解决方案3】:

    是的,这是合法的 C# 6.0 语法,前提是 TestLambda 有一个名为 inputValue 的字段。

    没有表达式体成员的等效代码如下所示:

    public class TestLambda
    {
        private string inputValue;
    
        private bool value
        {
            get { return inputValue == null; }
        }
    
        public TestLambda(string inputValue)
        {
            this.inputValue = inputValue;
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-12-07
      • 1970-01-01
      • 1970-01-01
      • 2013-09-10
      • 2022-01-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多