mam linię kodu, który daje mi komunikat ostrzegawczy (CS0675) w VS2015, ale nie w 2013 rokuBłąd w kompilatorze lub nieporozumieniu? Lub operator na spodenkach
shortValue |= (short)anEnum;
Ostrzeżenie CS0675 bitowym lub operatora wykorzystywane na steru- rozszerzony operand; Najpierw należy rozważyć rzutowanie na mniejszy, niepodpisany typ. Kompilator niejawnie rozszerzył i rozszerzył znak zmiennej, a następnie użył wartości wynikowej w bitowej operacji OR. Może to spowodować nieoczekiwane zachowanie.
Oczywiście to, co się dzieje, to enum i skrót są rozszerzane na int, operator lub stosowane, a następnie wynik przypisany wynik do skrótu.
Po zmianie kodu na shortValue = shortValue | (short)anEnum;
pojawia się błąd kompilatora CS0266. Ale bitowe OR powinno być ważne dla szortów (w obu przypadkach uważam). Jeśli umieścisz kursor myszy nad ikoną |
, pokaże się jako operator int, czy coś pomijam, czy powinienem zgłosić to jako błąd?
PS: Wiem, że mogę wyeliminować ostrzeżenie/błąd, używając =
zamiast |=
i rzutując wynik na krótki.
Zobacz także [Operatory bitowe lub operator używane w operandzie rozszerzonym znakiem w Visual Studio 2015] (http://stackoverflow.com/questions/31542256/) i inne wątki. –
To jest błąd w VS2015 i zostanie naprawiony w aktualizacji VS2015 1. Zobacz https://github.com/dotnet/roslyn/issues/4027. –