2016-11-27 50 views
15

Używam programu Visual Studio 2017 RC i zainstalowałem pakiet System.ValueTuple, który umożliwia nowe zastosowanie krotki C# 7.0, ale mogę „t sprawiają, że praca w tym konkretnym przypadku:"jeśli (obiekt jest (ciąg, kolor))" użycie krotki w tekscie 7.0 nie działa

Jak widać, pierwsza metoda nie ma żadnych czerwonych squigglies i po prostu działa. Ale staramy się robić o is (string, Color) nie powiedzie się z niepowiązanych błędów:

Może nie nowe krotki być używane w ten sposób? A może to tylko aktualny stan paczki? Zaktualizowałem ją do najnowszej wersji btw, która obecnie wynosi 4.3.0. Przeczytałem this MSDN post, ale nie znalazłem żadnego takiego użycia.

+2

Pakiet nuget dostarcza tylko niezbędne typy, nie dostarcza części kompilatora, który ją obsługuje, więc gdy pakiet Nuget jest niezbędny do użycia krotek, nie ma on żadnego w komunikacie o błędzie, który otrzymujesz. –

+11

Dla przyszłego odniesienia byłoby lepiej, gdybyś publikował kod i komunikaty o błędach jako tekst, a nie jako zrzuty ekranu, ułatwia innym, takim jak ja, eksperymentowanie z kodem i analizowanie wyników. –

+0

Z ciekawości: czy "o to Tuple " działa? – Dyrborg

Odpowiedz

7

Niektóre funkcje dopasowywania wzorów zostały usunięte z wersji C# 7. Obejmuje to dopasowywanie do wzorca dla krotek. Zostaje to wyciągnięte i umieszczone w przyszłych oddziałach. (https://github.com/dotnet/roslyn/issues/10866)

Oznacza to, że bardziej zaawansowane rodzaju dopasowanie wzorca wyjaśnia skutecznie Reddit plakatu wreckedadvent nie będzie dostępna w C# 7, w tym:

  • rekurencyjnych postaci wzoru, takiego jak pozycyjnych wzorów (np, p jest Person ("Mickey", *), wzory własności (np p jest Person {FirstName jest "Mickey"}), wzory krotkowe, wieloznaczny * itp

Źródło: https://www.infoq.com/news/2016/05/csharp7-pattern-matching-removed

AKTUALIZACJA: Test typu (int, int) może być interpretowany jako wzór krotki. Na przykład, jeśli chcesz wykonać test typu i powiązać wynik ze zmienną. Więc testowanie typu jest zaangażowane w wzory krotek. Na przykład (int x, int y) może być testem typu lub krotką. Zobacz dyskusję o dopasowywaniu wzorców na github: https://github.com/dotnet/roslyn/issues/11744

+1

Nie rozumiem, dlaczego usunięcie dopasowywania wzorca usunęło także niektóre przypadki 'o is Type', gdzie' Type' w tym przypadku jest krotką.Wygląda na to, że kompilatorowi bardzo trudno jest wyobrazić sobie, że '(T1, T2)' jest po prostu 'ValueType ', aw niektórych przypadkach niektóre atrybuty fałszywymi nazwami członków, a następnie w przypadku operatora 'is' wsparcie jest właśnie wykupione. Z drugiej strony, nie czytałem daleko w dokumentacji C# 7 lub implementacji, ale wydaje mi się dziwne, że ta konkretna część jest związana z bardziej zaawansowanym dopasowywaniem wzorców. –

+0

W szczególności, ponieważ 'o to ValueType ' ** does ** działa. –

+0

Nie znam szczegółów implementacji, ale myślę, że mówisz o dopasowaniu do wzorca z symbolem gwiazdki i wygląda na to, że jest to osobna funkcja, która nie powinna mieć wpływu na tę bardziej powszechną funkcję. – user1306322