다음 코드를 고려하십시오.
#nullable enable
class Foo
{
public string? Name { get; set; }
public bool HasName => Name != null;
public void NameToUpperCase()
{
if (HasName)
{
Name = Name.ToUpper();
}
}
}
Name = Name.ToUpper ()에서 Name이 가능한 null 참조라는 경고가 표시됩니다. HasName을 인라인하여이 경고를 치료할 수 있으므로 조건은 if (Name! = null)입니다.
컴파일러에 HasName의 진정한 응답이 Name에 대해 null이 아닌 제약 조건을 암시한다고 지시 할 수있는 방법이 있습니까?
HasName이 실제로 훨씬 더 많은 것을 테스트 할 수 있기 때문에 중요하며 여러 곳에서 사용하거나 API 표면의 공개 부분이 될 수 있습니다. null 검사를 자체 방법으로 인수 화해야하는 많은 이유가 있지만 그렇게하면 nullable 참조 검사기가 깨지는 것 같습니다.
난 당신이 경우에, 당신이 당신의 코드를 포장 할 수 있다고 생각
—
GaryNg
#nullable disable
다음 #nullable enable
또는 restore
(나중에 다시 docs.microsoft.com/en-us/dotnet/csharp/... ).
"dammit"
—
Jan Paolo Go
!
연산자를 사용할 수 있습니다 . if(HasName) { Name = Name!.ToUpper(); }
다중 스레드 응용 프로그램의 경우 속성으로 돌아 가지 않고 로컬로 변수를 사용하여 HasName 검사 후 Name이 null이 될 수 있습니다 (게터에서 속성이 수행 할 수 있음을 알고 있음). 많은 일이 발생한 이벤트 핸들러 사용)
—
XIU
HasValue
는 nullable 유형을 사용해야 하며 검사하지 마십시오null
. 그래도 문제에 영향을 미치지 않습니다.