上一篇文章介紹 了具名引數 (named argument) 的用法,其中被呼叫的方法是使用 C# 4.0 的 optionnal argument 達到方法選擇性參數,過去待過的公司 method 遇到選擇性參數時大多使用 optionnal argument 方式來解決,但其實有另外一種方式可以使用 optionAttribute,這篇就簡單介紹針對同樣需求兩者的寫法
使用方式
Optional Argument
相信很多人都使用過不再多做介紹,直接看 sample code 中 firstName、lastName 為選擇性參數,如果使用端沒有傳參數時就以使用預設值,如下所示
呼叫端使用上很簡單,可以按照順序傳入參數 (postitional argument) 或是具名引數 (named argument) 的方式達到,sample code 如下public static class FullName { public static string ParameterDefaults(string firstName, string lastName, string middleName = "", string title = "") { return (title == "") ? $"Hi, {firstName} {lastName}" : $"Hi,{firstName} {lastName}"; } }
// positional arguments FullName.ParameterDefaults("marcus", "tung"); FullName.ParameterDefaults("marcus", "tung", "middle"); FullName.ParameterDefaults("marcus", "tung", "middle", "mr."); // named arguments FullName.ParameterDefaults(firstName: "Marcus", lastName: "tung"); FullName.ParameterDefaults(middleName: " test", firstName: "Marcus", lastName: "tung"); FullName.ParameterDefaults(title: "Mr.", firstName: "Marcus", lastName: "tung", middleName: " test");
OptionalAttribute
來到今天主題,可以使用 optionalAttribute,使用前須先 using System.Runtime.InteropServices,在參數前面加上 [option] 即可使用,範例 Code 如下
using System.Runtime.InteropServices; public static string OptionalAttribute(string firstName, string lastName, [Optional] string middleName, [Optional] string title) { return (title == "") ? $"Hi, {firstName} {lastName}" : $"Hi,{firstName} {lastName}"; }
呼叫端使用 sample code 如下
// first + last FullName.OptionalAttribute("Marcus", "tung"); // title + first + last FullName.OptionalAttribute("Marcus", "tung", "Mr."); // first + last + middle FullName.OptionalAttribute(firstName: "Marcus", lastName: "tung", middleName: " test"); // title + first + last + middle FullName.OptionalAttribute("Marcus", "tung", "middle", "mr");
murmur
兩者在用法上都很簡單,但可以想一下當參數值越變越多時會有什麼後遺症,很有可能程式邏輯上會有很多 if ... else 判斷式分支產生,這時候程式碼就會出現壞味道。如果參數太多,可以考慮減少參數數量或是使用一個 model 來傳遞參數值,盡量降低代碼邏輯複雜化具名和選擇性引數
C# 4.0 Features
0 意見:
張貼留言