Guid.IsNullOrEmpty () 메서드가없는 이유


103

이것은 .NET의 Guid에 IsNullOrEmpty()메서드 가없는 이유가 궁금합니다 (비어 있으면 모두 0을 의미 함).

REST API를 작성할 때 ASP.NET MVC 코드의 여러 위치에서 필요합니다.

아니면 인터넷에서 아무도 같은 것을 요청하지 않았기 때문에 내가 뭔가를 놓치고 있습니까?


시작하려면 stackoverflow.com/questions/2344213/... 하지만 필요에 따라이Guid.Empty
V4Vendetta

답변:


236

Guid값 유형 이므로 유형 의 변수는 Guidnull로 시작할 수 없습니다. 빈 GUID와 동일한 지 알고 싶다면 다음을 사용할 수 있습니다.

if (guid == Guid.Empty)

Entity Framework가 Guid 변수를 Guid로 정의하는 경우는 어떻습니까? (nullable)?
Gautam Jain

6
@goths : 그런 다음 if (nullableGuid == null || nullableGuid == Guid.Empty)...를 사용 하거나 정말로 원하는 경우 자체 확장 방법을 만들 수 있습니다. 아마도 대부분의 사람들에게 가치가 없을 정도로 거의 나오지 않을 것입니다.
Jon Skeet 2012 년

2
@goths 모든 값 유형에 대한 일반적인 확장 방법을 만들 수 있습니다. 예 :public static bool IsNullOrDefault<T>(this T? self) where T : struct { return !self.HasValue || self.Value.Equals(default(T)); }
Jeppe Stig Nielsen

27

한 가지는 Guidnullable이 아닙니다. 다음을 확인할 수 있습니다.

myGuid == default(Guid)

이는 다음과 같습니다.

myGuid == Guid.Empty

2
C # 7.1 myGuid == default
Brad M

10

다음은 nullable 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);
}

최신 정보

정말로 이것을 모든 곳에서 사용하고 싶다면 일반 Guid에 대한 다른 확장 메서드를 작성할 수 있습니다. null이 될 수 없기 때문에 어떤 사람들은 이것을 좋아하지 않을 것입니다 ... 그러나 그것은 당신이 찾고있는 목적에 부합하고 당신이 Guid와 함께 일하고 있는지 알 필요가 없습니까? 또는 Guid (리팩토링 등에 적합).

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

이제 someGuid.IsNullOrEmpty();Guid 또는 Guid?를 사용 하는 모든 경우에 사용할 수 있습니다 .

내가 말했듯이 어떤 사람들은 IsNullOrEmpty()값이 null이 될 수 있다는 것을 암시 하기 때문에 이름 지정에 대해 불평 할 것입니다. 당신이 정말로 원한다면, 같은 확장에 다른 이름으로 와서 IsNothing()IsInsignificant()또는 무엇이든 :)


2

Guid에 대한 확장 메서드를 만들어 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
    }
}

g = new Guid()실제로 빈 GUID를 생성합니다. 글을 쓰려고 했습니까 g = Guid.NewGuid()?
David Hedlund 2012 년

0

다른 사람들이 지적했듯이 질문의 전제가 전부가 아닙니다. C # Guid은 Null을 허용하지 않습니다. 그러나 그렇습니다 Guid?. A는 경우에 판정의 깨끗한 방법 Guid?이다 null또는 Guid.Empty결과가 있는지 확인하는 것이다 GetValueOrDefault()이다 Guid.Empty. 예 :

Guid? id;

// some logic sets id

if (Guid.Empty.Equals(guid.GetValueOrDefault()))
{
    // Do something
}

-1

이 말은 항상 이런 말을 봅니다

Guid는 값 유형이므로 Guid 유형의 변수는 null로 시작할 수 없습니다.

그러나 그것은 사실이 아닙니다.

프로그래밍 방식으로 Guid를 null로 설정할 수는 없지만 일부 SQL이 UniqueIdentifier를 가져 와서 Guid에 매핑 할 때 해당 값이 db에서 null이면 값이 C #에서 null로 표시됩니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.