Z jakiegoś powodu to oświadczenie działa poprawnie:Korzystanie typu alias w oświadczeniu linq generuje błąd
vms.Where(vm => vm.MessageType == ValidationMessage.EnumValidationMessageType.Warning)
Ale jeśli na szczycie klasy I zdefiniować alias (w celu zaoszczędzenia miejsca):
using MsgType = ValidationMessage.EnumValidationMessageType;
Następnie uzyskany wiersz kodu:
vms.Where(vm => vm.MessageType == MsgType.Warning)
wyskakuje mi błąd:
"Delegat" System.Func<ValidationMessage, int, bool>
"nie przyjmuje 1 argumentów". To dziwne, że nie jest to Delegat, którego używam. Używam przeciążenia System.Func<ValidationMessage, bool>
'z .Where<>()
- tak samo jak wtedy, gdy nie używałem tego aliasu.
Zauważ, że wszędzie, gdzie używany jest alias, działa dobrze, tylko wewnątrz tych delegatów linq się psuje. Dlaczego to się dzieje?
Ahahaha. Jeśli spróbuję obejść to poprzez podanie argumentu dla drugiego argumentu (indeks): 'vms.Where ((vm, i) => vm.MessageType == MsgType.Warning), to odwraca i mówi" Delegat "System.Func" nie przyjmuje 2 argumentów "! Co za żart. –
Alain
Czy występują te same błędy, jeśli próbujesz skompilować? Czy po prostu pokazuje to błąd wykrywania VS? – nemesv
Naprawdę dobry punkt. Mój kod nie był inaczej w stanie kompilacji, więc nie próbowałem go, ale skomentowałem niedokończony kod i próbowałem uruchomić i znacznie bardziej uzasadniony błąd: nie mógł znaleźć przestrzeni nazw dla deklaracji aliasu mojego typu. Rozwiązaniem było pełne przeliterowanie ścieżki do typu: 'using MsgType = WPF.Utilities.ObjectModel.ValidationMessage.EnumValidationMessageType;' Po tym wszystkim wszystko się naprawiło. – Alain