只有累積,沒有奇蹟

2019年7月13日 星期六

[C#] Named Arguments 具名引數

前言 
同事在開發專案時詢問某 method 有多個參數,有些參數是選擇輸入有預設值,因參數太多是否有方法可以指定參數名字 ? 否則一堆有設定預設值的在閱讀代碼會造成困擾,不小心也可能傳入錯誤變數聽到當下建議抽成一個 Model 這樣更容易維護,但他表示由於引用的方法過多會擔心會牽一髮動全身,會有不可預期和毀滅性的災害發生,因此可以使用 具名引數 named arguments 來指定需要傳入的引數名稱與參數值這篇文章簡單介紹如何使用

使用方式
Sample Code 如下,Employee 類別底下有個取得 FullName 方法,其參數為 firstName、lastName以及有預設值為空的 middleName 與 title,方法會回傳 Hi 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}";
        }
    }
}
在沒有 named arguments 一般使用,需要按照方法的引數值依序輸入參數,順序是固定的如果順序錯誤即會帶到異常的數值,套用在 sample method Employee.FullName 如下
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 參數位置錯誤但輸出都是相同
參考
具名和選擇性引數
C# 4.0 Features

0 意見:

張貼留言

Copyright © m@rcus 學習筆記 | Powered by Blogger

Design by Anders Noren | Blogger Theme by NewBloggerThemes.com