Lambda for getter and setter of property
C#C# 6.0C# Problem Overview
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;
}
C# Solutions
Solution 1 - C#
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 int X
{
get => _x;
set => _x = value;
}
Solution 2 - C#
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
> 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
> }
> }
Solution 3 - C#
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; }