Czy jest jakiś sposób, aby stworzyć warunek przypadku w instrukcji przełączania, w którym mówisz, czy ciąg kończy się czymś?

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;
}
0
Mauricio Camacho 3 czerwiec 2018, 08:11

5 odpowiedzi

Najlepsza odpowiedź

Myślę, że to nie jest sposób! Możesz używać tylko if-innym

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";
}
0
Stephen Kennedy 3 czerwiec 2018, 10:00

Uzyskaj ostatni znak ciągu i przełącz wynik:

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

Jeśli ciąg może być null lub pusty, użyj czegoś takiego jak ta funkcja zamiast Last(). Ta funkcja zwraca null Jeśli ciąg jest null, null, jeśli ciąg jest pusty, a ostatni znak sznurka, jeśli nie jest null lub pusty:

char? GetLast(string s)
{
    return s?.Length > 0 ? s.Last() : (char?)null;
}

Przełącznik:

switch(GetLast(Pac.Sku))
3
Stephen Kennedy 3 czerwiec 2018, 10:30

Możesz Użyj Dopasowanie wzoru Funkcja C # 7.0, aby to osiągnąć. Oto bardzo podstawowy przykład:

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;
}
2
Ankit Vijay 3 czerwiec 2018, 05:27

Możesz uzyskać kreatywny z Func<string, string>[] w ten sposób:

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

Przetestowałem to z przykładowym wejściem, który pasuje do każdego z przypadków i działa dobrze.

Jedną znaczącą zaletą w tym podejściu jest zbudowanie Func<string, string>[] w czasie wykonywania. Miło tworzyć konfigurowalne rozwiązania.

Nie ograniczasz się wyłącznie do użycia EndsWith - dowolny stan może być używany, który odpowiada celowi.

2
Enigmativity 3 czerwiec 2018, 06:04
 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;
        }
-1
Nuriddin Kamardinov 3 czerwiec 2018, 05:36