同事在開發專案時詢問某 method 有多個參數,有些參數是選擇輸入有預設值,因參數太多是否有方法可以指定參數名字 ? 否則一堆有設定預設值的在閱讀代碼會造成困擾,不小心也可能傳入錯誤變數,聽到當下建議抽成一個 Model 這樣更容易維護,但他表示由於引用的方法過多會擔心會牽一髮動全身,會有不可預期和毀滅性的災害發生,因此可以使用 具名引數 named arguments 來指定需要傳入的引數名稱與參數值,這篇文章簡單介紹如何使用
使用方式
Sample Code 如下,Employee 類別底下有個取得 FullName 方法,其參數為 firstName、lastName以及有預設值為空的 middleName 與 title,方法會回傳 Hi FullName
在沒有 named arguments 一般使用,需要按照方法的引數值依序輸入參數,順序是固定的如果順序錯誤即會帶到異常的數值,套用在 sample method Employee.FullName 如下public static class Employee { public static string FullName(string firstName, string lastName, string middleName = "", string title = "") { if (title == "") { return $"Hi, {firstName} {middleName} {lastName}"; } else { return $"Hi, {title} {firstName} {middleName} {lastName}"; } } }
var normal = Employee.FullName("tung", "marcus"); var normalOne = Employee.FullName("tung", "marcus", "test"); var normalTwo = Employee.FullName("tung", "marcus", "test", "Mr.");named arguments 使用上很簡單,指定引數名稱 : 後面加上參數值
無須按照順序指定參數,只需要知道名稱就可以指定參數值,可以從代碼中明確知道某個參數指定哪個值,增加可讀性讓閱讀的同仁不會那麼容易混淆,範例 Code 如下
// first + last var fullName = Employee.FullName(firstName: "tung", lastName: "marcus"); var fullName0 = Employee.FullName(lastName: "marcus", firstName: "tung"); // title + first + last var fullName1 = Employee.FullName(firstName: "tung", lastName: "marcus", title: "Mr."); // first + last + middle var fullName2 = Employee.FullName(firstName: "tung", lastName: "marcus", middleName: " test"); // title + first + last + middle var fullName3 = Employee.FullName(firstName: "tung", lastName: "marcus", middleName: " test", title: "Mr.");
使用限制
使用上有些規定與限制 : 必須先指定位置參數 (positional arguments),在使用具名引數 (named arguments) 否則會有跳出錯誤,如下圖
輸出
可以發現 first + last 中兩個 sample 參數位置錯誤但輸出都是相同
參考使用上有些規定與限制 : 必須先指定位置參數 (positional arguments),在使用具名引數 (named arguments) 否則會有跳出錯誤,如下圖
輸出
可以發現 first + last 中兩個 sample 參數位置錯誤但輸出都是相同
具名和選擇性引數
C# 4.0 Features
0 意見:
張貼留言