C # 8.0 의 새로운 nullable 참조 형식 기능 을 테스트하고 싶었습니다 .
.NET Core 3.0을 대상으로 새 프로젝트를 시작하고 .csproj
파일 에서 nullable 참조 유형을 활성화 하고 코딩을 시작했습니다. a를 가져 와서 해당 배열에서를 string[]
반환 하는 간단한 목록을 만들었습니다 . 실제로 배열에 실제로 존재하는지 확실하지 않기 때문에 일치를 찾을 수 없으면 기본값을 사용해야합니다.string
abc
abc
FirstOrDefault()
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에서 서명을 살펴보면 이유가 분명합니다 .이 메서드는 string
nullable이 아닌을 반환합니다 string?
.
아래의 메소드 본문을 사용하면 예상했던 경고가 표시됩니다.
var arg = args.Contains("abc") ? "abc" : null;
return arg;
System.Linq
.NET Core 3.0을 대상으로 할 때 시스템 라이브러리 (이 예에서 )가 실제로 null 허용 정보를 노출하지 않습니까?