【C# 6.0】運算式主體成員(簡化回傳式)

介紹C# 6.0新功能-「運算式主體成員」(Expression-bodied members)介紹,將會敘述如何使用這個簡易的語法糖。
C# 6.0發表時間:2015年7月,始於.NET Framework 4.6,Visual Studio 2015。

 

「運算式主體成員」(Expression-bodied members),官方說明是:「輕量型方法提供輕量型語法」、「資料傳輸物件 (DTO) 及具有最小行為的其他類型」,看起來不太懂,十分抽象。但是概念卻很容易懂,簡單來說,就是在當有一個function,其邏輯很簡單,就可以適用這個簡易的寫法,直接把算式寫出來,不用再命名、運算、回傳值等動作。
所以他的形式為:member => expression;其中expression為有效的運算式。

 

範例一:式子為

public override string ToString()
{
    return FirstName + " " + LastName;
}

可以簡化為:public override string ToString() => FirstName + " " + LastName;

範例二,本來算式為Sum(int a, int b),我們要把A加上B,並且回傳,就會變成:return a + b;

Public int Sum(int a, int b)
{
 return a + b;
}

但是我們簡化後會變成:Public int Sum(int a, int b) => a + b;

從範例一(沒有參數)和範例二(有參數)可以看出來,這次簡化的結果是在function命名的後面,直接加上回傳的算式。就好像範例二的Public int Sum(int a, int b) 後,直接加上a + b;。所以公式就是「方法命名」+「=>」+「要回傳的算式」+「;」
記得這個語法糖適合在簡單的回傳值,如果太過於複雜,為了可讀性還是不建議這樣寫。
廢話不多說,直接看更長的範例吧!

 

public class Car
{
    public string Brand { get; private set; } //廠牌
    public string Model { get; } //型號
    public string AppearanceYear { get; private set; }  //出廠年份
    public int Price { get; private set; }  //價格

    public Car(string brand, string model, string year, int money)
    {
        Brand = brand;
        Model = model;
        AppearanceYear = year;
        Price = money;
    }

    public override string ToString() => Brand + "-" + AppearanceYear;

    public string ShowModel() => "Model: "+ Model; //顯示型號
    public double ShowMillion() => Price/1000000.0;//顯示價格(百萬)
    public double ShowPrice(int otherPrice) => (otherPrice + Price)/1000000.0;  //顯示總價格(百萬)
}

首先,我們先製作一個Car的Class,裡面有四個屬性:BrandModelAppearanceYearPrice,其中Model運用上一篇唯讀auto屬性,讓他不會被修改。
後面有四個function,皆是實作本篇的範例。前面兩個string,簡單的return 字串,而下面兩個是數學運算式,而最後一個ShowPrice,則是帶有參數,並且用此參數進行運算後回傳。

而實作的部份就在下面:

public class Program
{
    public static void Main()
    {
       var car = new Car("Lamborghini", "Aventador S" ,"2019", 4500000);
       Console.WriteLine(car.ToString());
       Console.WriteLine(car.ShowModel());
       Console.WriteLine("Price(million):" + car.ShowMillion());
       Console.WriteLine("Total Price(million):" + car.ShowPrice(1000000));
    }
}

甚至實作也可以使用「字串插補」(後續會說明,此為C# 6.0的新功能之一),所以會變成:

public override string ToString() => $"{Brand}-{AppearanceYear}";

字串因此更簡潔,不必使用「+」做連結

 

別忘了,這建議是寫在簡單的回傳算式中喔!

 

~Copyright by Eyelash500~

IT技術文章EY*研究院
iT邦幫忙eyelash*睫毛
Blog睫毛*Relax
Facebook睫毛*Relax