Wątek przeniesiony 2018-08-28 13:25 z C# i .NET przez somekind.

Metoda switch case w tablicy object

0

Mam prostą metodę switch z case w kontrolerze core mvc, która działa bez problemu.
Ta sama metoda umieszczona w aplikacji Console, już jest błędna. Metoda nie odwołuje się do niczego z "zewnątrz".
Jeżeli w kontrolerze usunę przestrzenie AspNetCore.Mvc i .Models, metoda nadal jest prawidłowa. Co więc sprawia, że
w klasycznym rozwiązaniu ta metoda jest błędna? Czy trzeba wcześniej wykonać rzutowanie elementów tablicy na konkretne typy?

static string[] Index()
        {

            object[] data = new object[] { 275M, 29.95M, "jabłka", "gruszki", 10, 100 };
            decimal total = 0;
            for (int i = 0; i < data.Length; i++)
            {
                switch (data[i])
                {
                    case decimal decimalValue:
                        total += decimalValue;
                        break;
                    case int intValue when intValue > 50:
                        total += intValue;
                        break;
                }

            }

            return (new string[] { $"Razem: {total:C2}" });
0

To jest w pełni poprawny kod c# 7 (u mnie działa), może się nie kompilować jeśli masz ustawioną niższą wersje c# w aplikacji konsolowej.

1

Może po prostu używasz starszej wersji C#?
Jest to tak zwany 'pattern matching', spróbuj skompilować pod nowszą wersje.

0

a wiecie to dziwne. Na VMware mam VS 2017 i tam kompiluje się bez problemów, jako aplikacja konsolowa z Net Framework 4.6 i 4.7.
Na VS 2015 mimo Framework'a 4.7 nie daje rady....
Może jakaś aktualizacja jest potrzebna. W każdym razie dzięki, wiem że kod ok i powinno działać ;-)

1

VS 2015 w swojej standardowej odmianie nie obsługuje C# 7 - zainstaluj paczkę Microsoft.Net.Compilers.

1 użytkowników online, w tym zalogowanych: 0, gości: 1