【问题标题】:Declare static class or struct method using expression body in C#在 C# 中使用表达式主体声明静态类或结构方法
【发布时间】:2015-10-07 07:49:46
【问题描述】:

我一直使用不可变的 readonly 字段和 public Expression<Func<>> getter,如下所示。

public class Person
{
    public static Person Named(string surname, string given) { return new Person(surname, given); } // ugly!

    protected Person(string surname, string given) { _surname = surname; _given = given; }

    private readonly string _surname;
    private readonly string _given;

    public string Name => _given + _surname; // cool!
}

我真的很希望能够使用上述静态方法来做到这一点。

我尝试了不同的语法,但没有奏效,即:

public static Person Named => x,y => new Person(x,y);
public static Person Named = (x,y) => new Person(x,y);
public static Person Named => ((x,y) => new Person(x,y));

【问题讨论】:

    标签: c# lambda delegates expression func


    【解决方案1】:

    正确方法如下

    public static Person Named(string surname, string given) => new Person(surname, given);
    

    值得一提的是,实例和静态属性/方法的语法没有区别。

    【讨论】:

    • 太棒了,谢谢。出于好奇,描述这种作业的正确方式是什么?
    • 它只是一个语法糖。函数/属性的声明保持不变,只是主体被缩短了。
    • @tacos_tacos_tacos 它被称为expression-bodied function
    猜你喜欢
    • 1970-01-01
    • 2014-11-09
    • 2014-05-12
    • 2011-05-04
    • 1970-01-01
    • 1970-01-01
    • 2010-11-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多