[英]C# simplify switch statement
我可以以某種方式簡化此 switch 語句,因為兩種情況都只使用另一個 function 參數做同樣的事情嗎?
switch (data.Subscriber.Protocol)
{
case "email json":
builder.Attachments.Add("Očitanje.json", CraftAttachment(data));
break;
case "email text":
builder.Attachments.Add("Očitanje.txt", CraftAttachment(data));
break;
default:
break;
}
//另一種不使用 Swtich 案例的干凈方法:
var ProtocolAndFileMappings = new Dictionary<string, string>()
{
{"email json","Očitanje.json"},
{"email text","Očitanje.json"},
{"email png","Očitanje.png"},
{"email Jpeg","Očitanje.Jpeg"}
};
builder.Attachments.Add(ProtocolAndFileMappings[data.Subscriber.Protocol], CraftAttachment(data));
另一種使用本地 function 來簡化調用的方法:
void add(string s) => if (s != null) builder.Attachments.Add(s, CraftAttachment(data));
add( data.Subscriber.Protocol switch
{
"email json" => "Očitanje.json",
"email text" => "Očitanje.txt",
_ => null
});
(雖然我認為有些人會批評它“太可愛了......)
注意:此解決方案(與其他解決方案一樣)存在缺陷。
該代碼將始終對 null 進行額外測試,而直接開關不會這樣做 - 所以這(非常邊緣)效率較低。
我個人會這樣做(避免了缺點):
void add(string s) => builder.Attachments.Add(s, CraftAttachment(data));
switch (data.Subscriber.Protocol)
{
case "email json": add("Očitanje.json"); break;
case "email text": add("Očitanje.txt") break;
default: /* Do nothing */ break;
}
像這樣的簡單本地函數很可能會被 JIT 編譯器內聯,所以應該沒有開銷。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.