2012-03-23 9 views
66

Esto me mantiene preguntando por qué GUID en .NET no tiene IsNullOrEmpty() método (donde los medios vacíos todos los ceros)¿Por qué no es un método no Guid.IsNullOrEmpty()

necesito esto en varios lugares en mi ASP. Código NET MVC al escribir la API REST.

¿O me falta algo porque nadie en Internet ha pedido lo mismo?

+0

Para empezar http://stackoverflow.com/questions/2344213/is-guid-considered-a-value -type-or-reference-type pero para sus necesidades existe 'Guid.Empty' – V4Vendetta

Respuesta

163

Guid es value type, por lo que una variable del tipo Guid no puede ser nula para empezar. Si desea saber si es el mismo que el GUID vacío, sólo puede utilizar:

if (guid == Guid.Empty) 
+0

¿Qué ocurre con los casos en los que Entity Framework define las variables Guid como Guid? (Nullable)? –

+4

@goths: Entonces podrías usar 'if (nullableGuid == null || nullGuid == Guid.Empty)' ... o crear tu propio método de extensión si realmente quieres. Es de suponer que aparece raramente lo suficiente como para que no valga la pena para la mayoría de las personas. –

+0

Ok, genial. Gracias. Así que voy en la dirección correcta :) –

22

Por un lado, Guid no es anulable. Podrías comprobar:

myGuid == default(Guid) 

el cual es equivalente a:

myGuid == Guid.Empty 
1

Puede realizar un método de extensión a Guid para añadir funcionalidad IsEmpty:

public static class GuidEx 
{ 
    public static bool IsEmpty(this Guid guid) 
    { 
     return guid == Guid.Empty; 
    } 
} 

public class MyClass 
{ 
    public void Foo() 
    { 
     Guid g; 
     bool b; 

     b = g.IsEmpty(); // true 

     g = Guid.NewGuid(); 

     b = g.IsEmpty; // false 

     b = Guid.Empty.IsEmpty(); // true 
    } 
} 
+0

' g = new Guid() 'de hecho creará un guid vacío. ¿Pretendes escribir 'g = Guid.NewGuid()'? –

+1

@DavidHedlund Gracias por eso, actualizado. – SimpleVar

5

Aquí es un método simple extensión de un Guid nulo.

/// <summary> 
/// Determines if a nullable Guid (Guid?) is null or Guid.Empty 
/// </summary> 
public static bool IsNullOrEmpty(this Guid? guid) 
{ 
    return (!guid.HasValue || guid.Value == Guid.Empty); 
} 

ACTUALIZACIÓN

Si realmente quería utilizar esto en todas partes se podría escribir otro método de extensión para un Guid regular. Nunca puede ser nulo, por lo que a algunas personas no les gustará esto ... pero cumple con el propósito que está buscando y no tiene que saber si está trabajando con Guid. o Guid (bueno para volver a factorizar, etc.).

/// <summary> 
/// Determines if Guid is Guid.Empty 
/// </summary> 
public static bool IsNullOrEmpty(this Guid guid) 
{ 
    return (guid == Guid.Empty); 
} 

Ahora usted podría utilizar someGuid.IsNullOrEmpty(); en todos los casos, si se está utilizando o Guid Guid ?.

Como dije, algunas personas se quejarán de la nomenclatura porque IsNullOrEmpty() implica que el valor podría ser nulo (cuando no puede). Si realmente quería, subir con un nombre diferente para las extensiones como IsNothing() o IsInsignificant() o lo que sea :)

Cuestiones relacionadas