Pregunta ¿Por qué no hay un método Guid.IsNullOrEmpty ()?


Esto me mantiene preguntándome por qué Guid en .NET no tiene IsNullOrEmpty() método (donde vacío significa todos los ceros)

Necesito esto en varios lugares de mi código ASP.NET MVC al escribir la API REST.

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


73
2018-03-23 10:27


origen


Respuestas:


Guid es un tipo de valor, entonces una variable de tipo Guid no puede ser nulo para empezar. Si quieres saber si es el mismo que el guid vacío, puedes usar:

if (guid == Guid.Empty)

178
2018-03-23 10:29



Por una cosa, Guid no es nulo. Usted podría verificar:

myGuid == default(Guid)

que es equivalente a:

myGuid == Guid.Empty

23
2018-03-23 10:29



Aquí hay un método de extensión simple para un Guid con nulos.

/// <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);
}

ACTUALIZAR

Si realmente quisiera usar esto en todos lados, 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 podrías usar someGuid.IsNullOrEmpty(); en todos los casos, ya sea que esté usando Guid o Guid ?.

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


5
2018-05-07 03:33



Puede hacer un método de extensión a Guid para agregar 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
    }
}

1
2018-03-23 10:33