Dlaczego to:Netto Trouble odlewania ints zrobić dziesiętne
(new[]{1,2,3}).Cast<decimal>();
wynik w
InvalidCastException: Określony oddanych nie jest prawidłowy.
Dlaczego to:Netto Trouble odlewania ints zrobić dziesiętne
(new[]{1,2,3}).Cast<decimal>();
wynik w
InvalidCastException: Określony oddanych nie jest prawidłowy.
Yup, Cast
tego nie robi. Zasadniczo dotyczy to tylko konwersji i rozpakowywania konwersji - a nie konwersji między różnymi typami wartości.
Użyj tego zamiast:
(new[]{1,2,3}).Select(x => (decimal)x)
Zauważ, że pre-.NET 3.5 SP1, Cast
zrobił kilka więcej konwersji niż obecnie. Nie wiem od razu, czy to by zadziałało, czy nie, ale zdecydowanie nie teraz.
Przesyłanie nie podlega konwersji.
Gdy używasz metody Cast, próbujesz rzucić element na podstawie schematu dziedziczenia. Ponieważ int nie pochodzi z dziesiętnych, nie można tego zrobić za pomocą Cast. Spróbuj zamiast tego:
(new[] {1,2,3}).Select(x => (decimal)X);
Jesteś zbyt szybki. :) –
Kilka uwag na temat tego, dlaczego rozpakowywanie konwersji od pudełkowej int do dziesiętnej nieskasowanej nie działa, zobacz http://blogs.msdn.com/ericlippert/archive/2009/03/19/representation-and-identity.aspx w celu uzyskania szczegółów . –
@Eric: Ciągle zapominam, że 'Cast' jest na' IEnumerable' (a więc obiektach) zamiast 'IEnumerable' - stąd dlaczego jest to konwersja unboxing, a nie konwersja między dwoma typami wartości. (Nie, żeby w tym przypadku działała prosta obsada). Pamiętaj, że mogę * nigdy * znaleźć stanowisko, w którym wyjaśnisz, co kiedyś robił Cast (przed SP1). –