Isso me mantém pensando por que Guid em .NET não tem IsNullOrEmpty()
método (onde vazio significa todos zeros)
Eu preciso disso em vários lugares no meu código ASP.NET MVC ao escrever a API REST.
Ou estou perdendo algo porque ninguém na Internet pediu o mesmo?
c#
asp.net-mvc
Gautam Jain
fonte
fonte
Guid.Empty
Respostas:
Guid
é um tipo de valor , portanto, uma variável do tipoGuid
não pode ser nula para começar. Se você quiser saber se é o mesmo que o guid vazio, você pode apenas usar:fonte
if (nullableGuid == null || nullableGuid == Guid.Empty)
... ou criar seu próprio método de extensão, se realmente quiser. Presumivelmente, raramente surge o suficiente para não valer a pena para a maioria das pessoas.public static bool IsNullOrDefault<T>(this T? self) where T : struct { return !self.HasValue || self.Value.Equals(default(T)); }
Por um lado,
Guid
não é anulável. Você pode verificar:que é equivalente a:
fonte
myGuid == default
Aqui está um método de extensão simples para um Guid anulável.
ATUALIZAR
Se você realmente quiser usar isso em todos os lugares, poderá escrever outro método de extensão para um Guid regular. Nunca pode ser nulo, então algumas pessoas não vão gostar ... mas serve ao propósito que você está procurando e você não precisa saber se está trabalhando com o Guid? ou Guid (bom para refatoração etc.).
Agora você pode usar
someGuid.IsNullOrEmpty();
em todos os casos, esteja usando Guid ou Guid ?.Como eu disse, algumas pessoas reclamarão da nomenclatura porque
IsNullOrEmpty()
implica que o valor pode ser nulo (quando não pode). Se você realmente quiser, escolha um nome diferente para as extensões, comoIsNothing()
ouIsInsignificant()
ou qualquer outra coisa :)fonte
Você pode fazer um método de extensão para Guid para adicionar a funcionalidade IsEmpty:
fonte
g = new Guid()
irá de fato criar um guid vazio. Você pretendia escreverg = Guid.NewGuid()
?Como outros apontaram, a premissa da questão não está completa. C #
Guid
não é anulável. No entanto,Guid?
é. Uma maneira limpa de verificar se aGuid?
énull
ouGuid.Empty
é verificando se o resultado deGetValueOrDefault()
éGuid.Empty
. Por exemplo,fonte
Você sabe que eu vejo essas declarações como esta o tempo todo
mas simplesmente NÃO É VERDADE.
Concordo que você não pode definir de forma programática um Guid como nulo, mas quando algum SQL puxa um UniqueIdentifier e o mapeia para um Guid, e se esse valor for nulo no banco de dados, o valor surge como nulo no C #.
fonte