2009-03-06 9 views

risposta

20

In C#, a differenza di Java, le enumerazioni non vengono controllate. Puoi avere qualsiasi valore del tipo sottostante. Questo è il motivo per cui è molto importante controllare i tuoi input.

+1

Ci sono alcune funzionalità di C# che desidero come sviluppatore Java (LINQ!), Ma qui Java ha davvero ragione ... –

+0

@saua: Non necessariamente. Sono vantaggi a questo approccio, così come gli svantaggi. –

+0

Il vantaggio principale di questo punto è che puoi combinare i valori, che dovresti anche contrassegnare con l'attributo [Flags]. –

1

Poiché l'enumerazione è basata su int, può accettare qualsiasi valore int possa. E dal momento che stai dicendo esplicitamente al compilatore (tramite il cast) che è ok per lanciare 4 nel tuo enum lo fa.

1

Ogni enumerazione ha un tipo numerico sottostante (ad es. Int) utilizzato per la rappresentazione. Anche se un valore non ha un nome, è un valore possibile che l'enum può avere.

1

Ciò che altri non hanno detto: con il casting, dici al compilatore che sai cosa stai facendo. Quindi, se lo dici, considera questo come valore enum, lo fa. Gli altri poster hanno sottolineato perché questo è ancora consentito, in quanto il compilatore C# non consente molte cose negative, anche se dici di sapere cosa stai facendo.

Sarebbe davvero pessimo se il valore non fosse consentito, perché in quel caso non si poteva salvare un valore di flag come int. Oppure, qualcuno doveva controllare se l'int è una delle combinazioni consentite, che può essere molto se si utilizza un enumerazione di bandiera (con valori che possono essere uniti).

Problemi correlati