[英]C# Switch-case string end with
有什么方法可以在 switch 語句中創建一個 case 條件,你說一個字符串是否以某物結尾?
switch (Pac.Sku)
{
case "A":
pacVM.Sucursal = "Managua";
break;
case "B":
pacVM.Sucursal = "Masaya";
break;
case "C":
pacVM.Sucursal = "Leon";
break;
default:
pacVM.Sucursal = "N/A";
break;
}
獲取字符串的最后一個字符,並切換結果:
switch (Pac.Sku.Last())
{
case 'A':
pacVM.Sucursal = "Managua";
break;
case 'B':
pacVM.Sucursal = "Masaya";
break;
case 'C':
pacVM.Sucursal = "Leon";
break;
default:
pacVM.Sucursal = "N/A";
break;
}
如果字符串可能為null
或為空,請使用類似此函數的函數而不是Last()
。 該函數返回null
字符串是否null
, null
字符串是否為空,字符串的最后一個字符,如果它不是null
或空:
char? GetLast(string s)
{
return s?.Length > 0 ? s.Last() : (char?)null;
}
轉變:
switch(GetLast(Pac.Sku))
您可以使用 C# 7.0 的模式匹配功能來實現這一點。 這是一個非常基本的例子:
var t = "blah";
switch (t)
{
case var a when t.EndsWith("bl"):
Console.WriteLine("I'm not here");
break;
case var b when t.EndsWith("ah"):
Console.WriteLine("I'm here");
break;
}
你可以像這樣使用Func<string, string>[]
來獲得創意:
Func<string, string>[] cases = new Func<string, string>[]
{
x => x.EndsWith("A") ? "Managua" : null,
x => x.EndsWith("B") ? "Masaya" : null,
x => x.EndsWith("C") ? "Leon" : null,
x => "N/A",
};
Func<string, string> @switch = cases.Aggregate((x, y) => z => x(z) ?? y(z));
string result = @switch(Pac.Sku);
我已經使用與每種情況匹配的示例輸入對此進行了測試,並且效果很好。
這種方法的一個顯着優點是您可以在運行時構建Func<string, string>[]
。 非常適合創建可配置的解決方案。
您也不僅限於使用EndsWith
- 可以使用適合目的的任何條件。
我覺得不是辦法! 您只能使用 if-else
if (Pac.Sku.EndsWith("A") )
{
pacVM.Sucursal= "Managua";
}
else if (Pac.Sku.EndsWith("B"))
{
pacVM.Sucursal= "Masaya";
}
else if (Pac.Sku.EndsWith("C"))
{
pacVM.Sucursal= "Leon";
}
else
{
pacVM.Sucursal= "N/A";
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.