Respuesta
dar una respuesta ligeramente diferente ... mientras que los valores son de tipo seguro desde el punto de vista de fundición, todavía están sin control una vez que hayan sido emitidos - es decir
enum Foo { A = 1, B = 2, C = 3 }
static void Main()
{
Foo foo = (Foo)500; // works fine
Console.WriteLine(foo); // also fine - shows 500
}
Por esta razón, usted debe tomar asegúrese de verificar los valores, por ejemplo, con un default
en un switch
que arroja una excepción.
también puede comprobar el (por
[Flags]
valores no) a través de:
bool isValid = Enum.IsDefined(typeof(Foo), foo);
Sí lo son.
La siguiente es de http://www.csharp-station.com/Tutorials/Lesson17.aspx
Enums se escriben fuertemente constantes. Son tipos esencialmente únicos que le permiten asignar nombres simbólicos a valores integrales. En la tradición de C#, están fuertemente tipados, lo que significa que una enumeración de un tipo no puede asignarse implícitamente a una enumeración de otro tipo, aunque el valor subyacente de sus miembros sea el mismo. En la misma línea, los tipos integrales y las enumeraciones no son implícitamente intercambiables. Todas las asignaciones entre diferentes tipos de enumeración y tipos integrales requieren un lanzamiento explícito.
enumeraciones son constantes inflexible. Son esencialmente tipos únicos que le permiten asignar nombres simbólicos a valores integrales . En la tradición de C#, que están fuertemente tipado, lo que significa que una enumeración de un tipo no puede ser implícitamente asignado a una enumeración de otro tipo a pesar de que la valor subyacente de sus miembros son la misma. En la misma línea, los tipos y enum integrales no son implícitamente intercambiables. Todas las asignaciones entre diferentes tipos de enum y tipos integrales requieren un lanzamiento explícito .
Re tipos enteros: a excepción del literal 0, que * está * implícito. –
Sí.
C#: tipos de enumeración:
: un tipo de fallos de enumeración de los valores mencionados.
-Evita errores de programación
-El usuario puede controlar el tipo subyacente (por defecto es int)
-También puede controlar los valores subyacentes
Técnicamente no, ya que puede representar una enumeración como valor de base (int, largo, etc.). Sin embargo, si se asegura de que solo utiliza la enumeración por los nombres provistos, recibirá errores de tiempo de compilación si cambia el nombre de un valor enumerado sin actualizar sus referencias. En este sentido sí, es tipo seguro.
llego tarde a la fiesta aquí, pero quería que tirar un poco de algo extra ... Una actualización del .NET Framework Design Guidelines de Krzysztof Cwalina. Además del excelente consejo anterior sobre verificación para asegurar que se pase un valor válido a sus Enumeraciones, esto proporciona otra guía y consejos sobre cómo usarlos de manera efectiva, un montón de errores (especialmente implicados Flags
enums), etc.
Para aquellos que sugieran usar Enum.IsDefined para hacer la validación de argumentos ... ¡no! Por Brad Abrams (del Framework Design Guidlines Update on Enum Design):
En realidad, hay dos problemas con Enum.IsDefined(). En primer lugar, carga el reflejo y un montón de metadatos de tipo frío, lo que lo convierte en una llamada engañosamente costosa. En segundo lugar, como la nota alude a que hay un problema de versiones aquí.
Buena llamada; Me perdí esa nota completa en mi primera lectura de eso hoy. –
@John Rudy: ¡Gracias! Ya sabía sobre esos problemas, pero es bueno poder señalar cierta documentación al respecto, especialmente con un ejemplo. –
sí que r de tipo fuerte safed u puede no que no hace la conversión impilcit de enumeración variables constantes a valor integeral u hv 2 expilcitly hacen dat por ejemplo días enum { sol, mon } int e = (int) days.sun; console.writeline (e);
C# enumeraciones son de tipo significado segura
- No se puede convertir implícitamente del tipo subyacente a la enumeración real
- Además, no se puede asignar un valor de una enumeración a otra enumeración, a pesar de que los tipos subyacentes de las dos enumeraciones son iguales. Siempre se requiere un lanzamiento explícito.
- Las enumeraciones hacen que su código sea más legible y más fácil de mantener.
He venido a través de un excelente video tutorial sobre enumeraciones que exponen su tipo de naturaleza segura. Eche un vistazo here y there.
- 1. ¿Las matrices C# son seguras?
- 2. ¿Las segmentaciones de C# son seguras?
- 3. ¿Las ventanas Win32 son seguras?
- 4. ¿Las propiedades estáticas autoejecutadas por C# son seguras para subprocesos?
- 5. ¿Son seguras las consultas multilínea sql-injection?
- 6. ¿Son seguras las preg_functions de PHP multibyte?
- 7. ¿Qué tan seguras son las sesiones de PHP?
- 8. ¿Las funciones en línea en C/C++ son una forma de hacerlas seguras para subprocesos?
- 9. Ayuda de la sesión CodeIgniter, ¿las cookies no son seguras?
- 10. ¿Son seguras las tablas temporales en SQL Server multiusuario?
- 11. ¿Las funciones de tiempo de MSVC son seguras para subprocesos?
- 12. cuán seguras son las declaraciones preparadas por PDO
- 13. ¿Las funciones LoadLibrary, FreeLibrary y GetModuleHandle Win32 son seguras?
- 14. ¿Las clases de singleton son seguras para subprocesos en IIS?
- 15. ¿Qué tan seguras son las claves de acceso Amazon AWS?
- 16. ¿Son seguras las matrices de Java en un método estático?
- 17. ¿Qué tan seguras son las variables de sesión de PHP?
- 18. ¿Las instancias del programador de Quartz son seguras?
- 19. C++ variables locales seguras multiproceso?
- 20. ¿Tus colecciones son seguras para hilos?
- 21. ¿Las consultas dinámicas de mysql con sql escapan son tan seguras como las declaraciones preparadas?
- 22. rosca Propiedades seguras en C#
- 23. ¿Están seguras las clases de Static?
- 24. ¿Las variables estáticas de la función son seguras para subprocesos en GCC?
- 25. ¿Qué operaciones en el nodo son seguras para hilos?
- 26. ¿Cómo se aplican las contraseñas seguras?
- 27. ¿Qué operaciones son seguras para hilos en std :: map?
- 28. ¿Cuáles son las técnicas para permitir actualizaciones de software seguras en sistemas integrados?
- 29. ¿Las llamadas a los métodos de Javascript son seguras o sincronizadas?
- 30. ¿Por qué las clases como BindingList o ObservableCollection no son seguras para subprocesos?
+1 para la sugerencia Enum.IsDefined. – OregonGhost
Oh, este es un buen consejo. No sabía esto ... siempre supuse que arrojaría una InvalidCastException o algo así. Definitivamente +1 de mi parte –
+1. Enum.IsDefined es un gran héroe anónimo ... –