FirstOrDefault에서 노출되지 않는 널 입력 가능 참조 유형 정보


10

C # 8.0 의 새로운 nullable 참조 형식 기능 을 테스트하고 싶었습니다 .

.NET Core 3.0을 대상으로 새 프로젝트를 시작하고 .csproj파일 에서 nullable 참조 유형을 활성화 하고 코딩을 시작했습니다. a를 가져 와서 해당 배열에서를 string[]반환 하는 간단한 목록을 만들었습니다 . 실제로 배열에 실제로 존재하는지 확실하지 않기 때문에 일치를 찾을 수 없으면 기본값을 사용해야합니다.stringabcabcFirstOrDefault()null

using System;
using System.Linq;

public string FindArgument(string[] args)
{
    var arg = args.FirstOrDefault(x => x == "abc");
    return arg;
}

내 메소드가 리턴 string, 해야 지금 할 nullable이 아닌 유형입니다. 를 FirstOrDefault()반환 할 수 있기 때문에 null 변수를 null반환 할 때 위의 메서드가 경고를 생성 할 것으로 예상합니다 . 그렇지 않습니다. arg

FirstOrDefault()Visual Studio에서 서명을 살펴보면 이유가 분명합니다 .이 메서드는 stringnullable이 아닌을 반환합니다 string?.

아래의 메소드 본문을 사용하면 예상했던 경고가 표시됩니다.

var arg = args.Contains("abc") ? "abc" : null;
return arg;

System.Linq.NET Core 3.0을 대상으로 할 때 시스템 라이브러리 (이 예에서 )가 실제로 null 허용 정보를 노출하지 않습니까?

답변:


9

System.Linq3.0 릴리스에서는 주석을 달 수없는 것 같습니다 . 따라서 널 입력 가능 참조 유형은 올바른 경고를 표시하지 않습니다.

roslyn 저장소 에서 비슷한 문제를 확인할 수 있습니다 . Github에서 공개 된이 문제 는 문제와 매우 유사합니다. 이 문제에서 기고자는 현재 문제를 설명합니다.

System.Linqcorefx의 마스터 브랜치에는 주석을 달 수 있지만 release / 3.0 에는 주석이 없습니다 . 따라서 컴파일러에는 예상치 못한 것이 없습니다. 컴파일러는 널 입력 가능하지 않은 것을 사용하고 있음을 보여주는 진단을 제공해야합니다.


이에 추가하기 위해이 패키지 를 사용 하여 오늘 올바른 주석을 얻을 수 있습니다.
canton7

1
이것은 여전히 ​​.NET Core 3.1의 경우입니다. 널 입력 가능 참조 유형에 대한 작업을 덜 멋지게 만듭니다. 나는 풀 요청 믿고 corefx / 풀 / 40651 수정이,하지만 분명히 우리는 때까지 기다려야 할 것이다 .NET 5 얻을 것을 :-(
Jeppe의 Stig 닐슨
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.