C # Строка переключателя заканчивается на - PullRequest
0 голосов
/ 03 июня 2018

Есть ли способ создать условие case в операторе switch, где вы говорите, что строка заканчивается чем-то?

                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 голосов
/ 03 июня 2018

Получите последний символ строки и переключите результат:

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))
0 голосов
/ 03 июня 2018

Вы можете проявить творческий подход с помощью 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);

Я проверил это на примере ввода, который соответствует каждому случаю, и он прекрасно работает.

OneСущественным преимуществом этого подхода является то, что вы можете создать Func<string, string>[] во время выполнения.Прекрасно подходит для создания настраиваемых решений.

Вы также не ограничены просто использованием EndsWith - можно использовать любое условие, которое соответствует цели.

0 голосов
/ 03 июня 2018

Вы можете использовать сопоставление с шаблоном для 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;
}
0 голосов
/ 03 июня 2018
 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;
        }
0 голосов
/ 03 июня 2018

Я думаю, что это не способ!Вы можете использовать только 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";
}
...