Cómo crear tipos de valores que no aceptan valores de nulos, como int, bool, etc. en C#?Crear tipos que no admiten valores en C#
Respuesta
Sí, estos se llaman struct
.
Las estructuras son tipos de valores, al igual que int
, bool
y otros.
tienen algunas reglas/recomendaciones relacionadas con ellos: (creo que estos son los más importantes)
una estructura se pasa y se asigna por valor, cuando no se utiliza ref o palabras clave fuera .. Esto significa que todo lo que coloque dentro de una estructura se copiará cuando lo asigne o lo pase a un método. Es por eso que no deberías hacer grandes estructuras.
no se puede definir un constructor sin parámetros de una estructura en C#
estructuras son mejores que son inmutables, y no tienen los emisores de propiedad. Puedes meterte en verdaderos problemas haciendo estructuras mutables.
Se pueden encontrar otras reglas en los documentos de Microsoft sobre structs.
En cuanto a tipos de referencia no anulables ... esto es no es posible. Debe verificar nulos dentro de su código, manualmente.
Se puede definir una struct:
Un tipo struct es un tipo de valor que se utiliza normalmente para encapsular pequeños grupos de variables relacionadas, tales como las coordenadas de un rectángulo o las características de un elemento en una inventario. El siguiente ejemplo muestra una estructura simple declaración:
public struct Book { public decimal price; public string title; public string author; }
Sin embargo, no se puede definir alias como int
para System.Int32
y que tenga que consultar con el nombre completo MyNamespace.Book
(o Book
con using MyNamespace;
) a su estructura.
- 1. Tipos de referencia que no admiten nulos (una vez más)
- 2. ¿Cómo puedo acercarme a los tipos de referencia que no admiten nulos en C# hoy?
- 3. ¿Por qué no debo usar siempre tipos que aceptan valores de nulo en C#
- 4. ¿Ya no se admiten los tipos estructurales recursivos en scala?
- 5. Cómo agregar columnas que no admiten nulos con los valores predeterminados
- 6. Fácil creación de propiedades que admiten indexación en C#
- 7. C++ 0X memory_order sin vallas, aplicaciones, chips que admiten
- 8. ¿Qué tipos de letra admiten las aplicaciones de iPhone?
- 9. Reflexión: compruebe que todas las propiedades que admiten nulos tienen valores
- 10. tipos de valores inmutables
- 11. Cómo crear una instancia de tipos de valores que utilizan la reflexión
- 12. ¿Qué rango de valores pueden almacenar tipos enteros en C++
- 13. C#: ¿tipos genéricos que tienen un constructor?
- 14. Operaciones en tipos de valores arbitrarios
- 15. matriz asociativa C++ con tipos arbitrarios para los valores
- 16. Valores Unboxing Tipos de objetos
- 17. ¿Hay interfaces compartidas por tipos de valores que representan números?
- 18. Agregue columnas que no admiten nulos a una tabla existente en el servidor SQL?
- 19. ¿Cuáles son las diferencias entre los tipos de valores y los tipos de referencia en C#?
- 20. C# == es diferente en tipos de valores y tipos de referencia?
- 21. Comparaciones directas de los tipos de valores de C#
- 22. C# Restricciones genéricas para incluir tipos de valores Y cadenas
- 23. Lenguajes de script que admiten fibras/coroutines?
- 24. ¿Cómo creo un diccionario que contiene diferentes tipos en C#
- 25. Los métodos de extensión definidos en los tipos de valores no se pueden usar para crear delegados. ¿Por qué no?
- 26. Comparación de tipos de valores en caja
- 27. ¿Cómo hacer que la transparencia PNG funcione en navegadores que no la admiten de forma nativa?
- 28. Maven Instalar: "Anotaciones no se admiten en -fuente 1.3"
- 29. genéricos C# - posible crear un método con n tipos genéricos ..?
- 30. Tipos no coinciden para crear un procedimiento almacenado CLR
¿En qué contexto usaría tal cosa? Con eso, quiero decir, ¿qué estás tratando de lograr? Siempre puede verificar nulo al usar objetos creados con sus clases en C#. y es extraño que estés usando el término "tipo". Si agregaste algo de contexto a tu pregunta, sería más fácil encontrar una solución. – stephenbayer
Los tipos de referencia AFAIK no anulables serían posibles si el operador de asignación fuera susceptible de carga. Sin embargo, este no es el caso en C#. La otra captura es 'MyType type;' sería nula al inicio. –
@stephenbayer: los nulos son * malos *. Las comprobaciones nulas de tipo Run-type fundamentalmente no son diferentes de las verificaciones de tipo de tipo run-type. Si le doy una cadena y llama a los métodos, no sabrá si es o no nulable hasta que explote durante el tiempo de ejecución. Algunos idiomas tienen tipos de referencia no anulables; si desea representar un valor nulo, use un tipo de datos diferente (equivalente a la 'opción 'que se encuentra en muchos idiomas), por lo que se comunica y exige la verificación nula a través del sistema de tipos en tiempo de compilación. Ver http://stackoverflow.com/questions/641328/about-the-non-nullable-types-debate/1451909#1451909. –
Juliet