Rzucanie intów do enums w C #
Jest coś, czego nie mogę zrozumieć w języku C #. Możesz rzucić poza zasięgint
wenum
a kompilator się nie wzdryga. Wyobraź to sobieenum
:
enum Colour
{
Red = 1,
Green = 2,
Blue = 3
}
Teraz, jeśli napiszesz:
Colour eco;
eco = (Colour)17;
Kompilator uważa, że to w porządku. I także czas działania. ?
Dlaczego zespół C # zdecydował się to umożliwić? Ta decyzja pomija punkt, w którym używa się wyrażeń, jak sądzę, w takich scenariuszach:
void DoSomethingWithColour(Colour eco)
{
//do something to eco.
}
W silnym języku, takim jak C #, chciałbym to założyćeco
zawsze będzie mieć legalneColour
wartość. Ale tak nie jest. Programista mógł nazwać moją metodę o wartości 17 przypisanej doeco
(jak w poprzednim fragmencie kodu), więc kod w mojej metodzie nie może zakładać tegoeco
posiada prawneColour
wartość. Muszę dokładnie to sprawdzić i poradzić sobie z wyjątkowymi wartościami, tak jak chcę. Dlaczego to?
Moim skromnym zdaniem byłoby o wiele ładniej, gdyby kompilator wydał błąd (lub nawet ostrzeżenie) podczas rzucania poza zasięgiemint
wenum
, jeśliint
wartość jest znana w czasie kompilacji. Jeśli nie, środowisko wykonawcze powinno zgłosić wyjątek w instrukcji przypisania.
Co myślisz? Czy jest jakiś powód, dlaczego tak jest?
(Uwaga. To jest pytanieWysłałem wieki temu na mój blog ale nie otrzymałem odpowiedzi informacyjnej.)