2009-10-11 15 views
19

Nunca he usado tipos anulables en mi código C#. Ahora he decidido cambiar mi práctica de codificación mediante la introducción de tipos anulables en mi código.Prácticas de codificación para C# Nullable tipo

¿Cuáles son los principales cambios en las prácticas de codificación que se deben hacer al hacer una transición de los tipos de datos normales a los tipos de datos anulables en el caso de la programación de aplicaciones?

¿Cuáles son las áreas que deben cuidarse?

¿Cuáles son los puntos que siempre debo tener en cuenta?

Respuesta

11

Nullable<T> es útil para cuando necesita un posible estado no válido para un tipo de valor, o si los datos se recuperan de una base de datos que puede contener un valor null para la columna. Es muy común en algún viejo código FORTRAN que transfiero a C# que los valores inválidos sean negativos o 0, pero esto es problemático especialmente cuando los valores se usan en funciones matemáticas. Es mucho más explícito usar Nullable<T> para mostrar ese posible estado inválido.

Vale la pena mencionar que la siguiente es la misma:

Nullable<int> myNullableInt; 
int? myNullableInt; 
+10

Sugerencias: No olvide que el valor nulo de la base de datos se representa como DBNull.Value por ADO.NET. Asegúrese de utilizar DBNull.Value para comunicarse con DB en lugar de nulo de Nullable . –

18

No utilice los tipos que aceptan nulos porque son una "cosa nueva y genial" que ha descubierto. Úselos donde sean aplicables y genuinamente útiles.

Hay gastos generales para usarlos, y si se usan incorrectamente aumentarán innecesariamente la complejidad de su código.

También debe tener cuidado para evitar las dereferencias nulas, por lo que le impone una carga adicional a los programadores que trabajan con ese código. (Sin embargo, en algunos casos, esto es preferible al costo de un enfoque de solución alternativa)

+0

Esto nunca es una buena idea. Porque nadie sabe qué cambios están entrando en el marco .net y puede ser que el cambio se base completamente en tipos Nullable. – anonymous

+5

@JMSA: No entiendo lo que intentas decir. –

+1

+1. Los tipos anulables son increíblemente útiles cuando los necesita, pero Jason tiene razón al evitar sobrecargar a las personas que llaman con la necesidad de verificar valores vs. nulos todo el tiempo. Considere lanzar una excepción si null no es válido. – TrueWill

1

Raramente utilizo tipos que aceptan nulos. El único lugar donde los uso es cuando trato con tipos nulos en la base de datos.

5

Un par de otras buenas ideas para el uso de tipos anulables:

  • No se olvide de la flexibilidad en la sintaxis. Nullable<int> es lo mismo que int?
  • Compruebe nulo (var.HasValue) y vuélvalo a tipo base antes de usarlo como tipo de base.
+0

'ejecútelo al tipo de base antes de usarlo como tipo base.' - No entiendo lo que quieres decir aquí ... Si quieres el valor, simplemente usa 'var.Value', o incluso 'var' si ya lo has marcado, tiene un valor. – nicodemus13

+0

Oh, sigo lo que quieres decir aquí; ¿Quiere decir cuando lo asigna a una nueva variable del tipo subyacente? – nicodemus13

+0

Sí. Es decir. siempre verifique para asegurarse de que su Nullable tiene valor antes de poner ese valor en un int. – LJM

2

Parecen adecuados para el valor inicial de algunas variables de tipo de valor.

int? lastCodeReceived; 

if (lastCodeReceived.HasValue) 
{ 
    // At least one code has been received. 
} 
8

Además me resulta útil la siguiente propiedad:

public bool? IsHappy { get; set; } 

Esto me permite tener un valor booleano de tres estados: sí, no, no responde.

Cuestiones relacionadas