[c#] “{}”은 무슨 뜻입니까?

때로는 다음 코드가 표시되며 표현식이 실제로 테스트하는 것을 모릅니다.

public static void Something(string[] value)
{
   if (value is { })
   {
      DoSomethingElse();
   }
}



답변

그것은 C # 8의 빈 속성 패턴입니다 null. 모든 값 유형 또는 참조 유형과 일치합니다. Panagiotis Kanavos가 주석에서 언급했듯이 이것은 value is object오랫동안 C #에 있었던 좋은 이전 검사 와 같습니다 .

일반적으로 속성을 지정하면 일치하거나 일치하지 않습니다. 이 난해한 예는 다음을 보여줍니다.

if (value is { Length: 2 })
{
   // matches any object that isn't `null` and has a property set to a length of 2
}

속성 패턴은 switch표현식 과 같은 경우 다른 패턴과 비교할 때 가장 잘 작동하고 가장 명확 합니다.


답변

Daniel의 대답은 옳지 만 빈 속성 패턴이 사용되는 이유 에 대한 컨텍스트를 추가하는 것이 도움 이 될 수 있습니다. 몇 가지 유효성 검사가 필요한이 예제 컨트롤러 방법을 고려하십시오.

public async Task<IActionResult> Update(string id, ...)
{
    if (ValidateId(id) is { } invalid)
        return invalid;
    ...
}

ValidateId()의 경우 null 또는의 인스턴스를 반환 할 수 BadObjectRequestResult있습니다. 전자가 반환되면 유효성 검사가 성공하고의 나머지 본문으로 이동 Update합니다. 후자가 반환되면 is {}이다 진정한 (의 예 물론 인스턴스 BadObjectRequestResult이다가 object), 및 유효성 검사가 실패합니다.

이 중에서도 변수 이름을 제공하여 invalid즉시 반환 할 수 있습니다. 그렇지 않으면 약간 더 자세한 코드가 필요합니다.

public async Task<IActionResult> Update(string id, ...)
{
    var invalid = ValidateId(id);
    if (invalid != null)
        return invalid;
    ...
}

하나는 더 읽기 쉬운 지 다른 쪽은 독자에게 달려 있든, 빈 속성 패턴을 사용할 수있는 한 가지 방법을 제시했습니다.


답변

값이 빈 객체인지 확인하는 것이라고 생각합니다.


답변