2012-03-23 12 views
66

To trzyma mnie zastanawiać, dlaczego Guid w .NET nie posiada IsNullOrEmpty() sposób (gdzie pusty środki zerami)Dlaczego nie jest metoda istnieje Guid.IsNullOrEmpty()

muszę to w kilku miejscach w moim ASP. Kod MVC NET podczas pisania REST API.

Czy coś mi brakuje, ponieważ nikt w Internecie nie poprosił o to samo?

+0

Aby rozpocząć http://stackoverflow.com/questions/2344213/is-guid-considered-a- wartość -type-lub-reference-type ale dla twoich potrzeb jest 'Guid.Empty' – V4Vendetta

Odpowiedz

163

Guid to value type, więc zmienna typu Guid nie może mieć wartości NULL. Jeśli chcesz wiedzieć, czy to jest to samo jak pustym GUID, można po prostu użyć:

if (guid == Guid.Empty) 
+0

Co z przypadkami, w których Entity Framework definiuje zmienne Guida jako Guid? (Nullable)? –

+4

@goths: Wtedy możesz użyć 'if (nullableGuid == null || nullableGuid == Guid.Empty)' ... lub utwórz własną metodę rozszerzenia, jeśli naprawdę chcesz. Przypuszczalnie rzadko pojawia się to, że nie jest to warte dla większości ludzi. –

+0

Dobrze. Dzięki. Idę w dobrym kierunku :) –

22

Z jednej Guid nie jest pustych. Można sprawdzić:

myGuid == default(Guid) 

co jest równoważne:

myGuid == Guid.Empty 
1

Można dokonać metodę rozszerzenia do GUID, aby dodać funkcjonalność 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() 'faktycznie utworzy puste guid. Czy masz zamiar napisać 'g = Guid.NewGuid()'? –

+1

@DavidHedlund Dzięki za to, zaktualizowany. – SimpleVar

5

Oto prosta metoda rozszerzenie dla Nidlable Guid.

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

UPDATE

Jeśli naprawdę chciał to wykorzystać wszędzie można napisać inną metodę rozszerzenia dla zwykłego GUID. To nigdy nie może być puste, więc niektórym się to nie spodoba ... ale służy celowi, którego szukasz i nie musisz wiedzieć, czy pracujesz z Guidem? lub Guid (miło na ponowne faktoring itp.).

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

Teraz można użyć someGuid.IsNullOrEmpty(); we wszystkich przypadkach, czy używasz Guid GUID ?.

Tak jak powiedziałem, niektórzy ludzie będą narzekać na nazwę, ponieważ IsNullOrEmpty() oznacza, że ​​wartość może być zerowa (gdy nie może). Jeśli naprawdę chcesz, wymyślić inną nazwę dla rozszerzeń, takich jak IsNothing() lub IsInsignificant() lub cokolwiek :)

Powiązane problemy