때로는 다음 코드가 표시되며 표현식이 실제로 테스트하는 것을 모릅니다.
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;
...
}
하나는 더 읽기 쉬운 지 다른 쪽은 독자에게 달려 있든, 빈 속성 패턴을 사용할 수있는 한 가지 방법을 제시했습니다.
답변
값이 빈 객체인지 확인하는 것이라고 생각합니다.