Expression-bodied function members C# with Example



Expression-bodied function members C# with Example

Expression-bodied function members allow the use of lambda expressions as member bodies. For simple 
members, it can result in cleaner and more readable code. 
Expression-bodied functions can be used for properties, indexers, methods, and operators. 
Properties 
public decimal TotalPrice => BasePrice + Taxes; 
Is equivalent to: 
public decimal TotalPrice 
{ 
get 
{ 
return BasePrice + Taxes; 
} 
} 
When an expression-bodied function is used with a property, the property is implemented as a getter-only 
property. 
View Demo 
Indexers 
public object this[string key] => dictionary[key]; 
Is equivalent to: 
public object this[string key] 
{ 
get 
{ 
return dictionary[key]; 
} 
} 
 

Methods 
static int Multiply(int a, int b) => a * b; 
Is equivalent to: 
static int Multiply(int a, int b) 
{ 
return a * b; 
} 
Which can also be used with void methods: 
public void Dispose() => resource?.Dispose(); 
An override of ToString could be added to the Pair class: 
public override string ToString() => $"{First}, {Second}"; 
Additionally, this simplistic approach works with the override keyword: 
public class Foo 
{ 
public int Bar { get; } 
public string override ToString() => $"Bar: {Bar}"; 
} 
Operators 
This also can be used by operators: 
public class Land 
{ 
public double Area { get; set; } 
public static Land operator +(Land first, Land second) => 
new Land { Area = first.Area + second.Area }; 
} 
Limitations 
Expression-bodied function members have some limitations. They can't contain block statements and any other 
statements that contain blocks: if, switch, for, foreach, while, do, try, etc. 
Some if statements can be replaced with ternary operators. Some for and foreach statements can be converted 
to LINQ queries, for example: 
IEnumerable Digits 
{ 
get 
{ 
for (int i = 0; i < 10; i++) 
yield return i.ToString(); 
} 
} 
 

IEnumerable Digits => Enumerable.Range(0, 10).Select(i => i.ToString()); 
In all other cases, the old syntax for function members can be used. 
Expression-bodied function members can contain async/await, but it's often redundant: 
async Task Foo() => await Bar(); 
Can be replaced with: 
Task Foo() => Bar(); 

0 Comment's

Comment Form

Submit Comment