Lambda for getter and setter of property

*爱你&永不变心* 提交于 2019-12-17 07:25:49

问题


In C# 6.0 I can write:

public int Prop => 777;

But I want to use getter and setter. Is there a way to do something kind of the next?

public int Prop {
   get => propVar;
   set => propVar = value;
}

回答1:


First of all, that is not lambda, although syntax is similar.

It is called "expression-bodied members". They are similar to lambdas, but still fundamentally different. Obviously they can't capture local variables like lambdas do. Also, unlike lambdas, they are accessible via their name:) You will probably understand this better if you try to pass an expression-bodied property as a delegate.

There is no such syntax for setters in C# 6.0, but C# 7.0 introduces it.

private int _x;
public X
{
    get => _x;
    set => _x = value;
}



回答2:


C# 7 brings support for setters, amongst other members:

More expression bodied members

Expression bodied methods, properties etc. are a big hit in C# 6.0, but we didn’t allow them in all kinds of members. C# 7.0 adds accessors, constructors and finalizers to the list of things that can have expression bodies:

class Person
{
    private static ConcurrentDictionary<int, string> names = new ConcurrentDictionary<int, string>();
    private int id = GetId();

    public Person(string name) => names.TryAdd(id, name); // constructors
    ~Person() => names.TryRemove(id, out _);              // finalizers
    public string Name
    {
        get => names[id];                                 // getters
        set => names[id] = value;                         // setters
    }
}



回答3:


There is no such syntax, but the older syntax is pretty similar:

    private int propVar;
    public int Prop 
    {
        get { return propVar; }
        set { propVar = value; }
    }

Or

public int Prop { get; set; }


来源:https://stackoverflow.com/questions/36372457/lambda-for-getter-and-setter-of-property

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!