C#Switch-case字符串结尾

时间:2018-06-03 05:11:21

标签: c# string switch-statement case

有没有办法在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;
            }

5 个答案:

答案 0 :(得分:2)

您可以通过以下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 - 可以使用任何适合此目的的条件。

答案 1 :(得分:0)

我认为这不是一种方式! 您只能使用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";
}

答案 2 :(得分:0)

你可以 使用C#7.0的pattern matching功能来实现这一目标。这是一个非常基本的例子:

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;
}

答案 3 :(得分:0)

获取字符串的最后一个字符,然后切换结果:

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))

答案 4 :(得分:-1)

 char c = Pac.Sku[Pac.Sku.Length-1];
 switch (c)
        {
            case "A":
                pacVM.Sucursal = "Managua";
                break;

            case "B":
                pacVM.Sucursal = "Masaya";
                break;

            case "C":
                pacVM.Sucursal = "Leon";
                break;

            default:
                pacVM.Sucursal = "N/A";
                break;
        }