簡體   English   中英

C# Switch-case 字符串以

[英]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字符串是否nullnull字符串是否為空,字符串的最后一個字符,如果它不是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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM