이 질문에 엄청나게 늦었다는 것을 알고 있지만 C #의 최신 주요 반복이 릴리스에 가까워지고 릴리스되면 대답이 관련성이 높아질 것이라고 생각합니다. C # 8.0에서는 주요 변경 사항이 발생하고 C #은 모든 유형이 null이 아닌 것으로 간주합니다.
Mads Torgersen에 따르면 :
문제는 null 참조가 매우 유용하다는 것입니다. C #에서는 모든 참조 유형의 기본값입니다. 기본값은 무엇입니까? 변수에 할당 할 다른 값을 결정할 수있을 때까지 변수에는 어떤 다른 값이 있습니까? 채울 때까지 새로 할당 된 참조 배열을 포장 할 수있는 다른 값은 무엇입니까?
또한 때때로 null은 그 자체로 합리적인 값입니다. 때로는 필드에 값이 없다는 사실을 나타내려고합니다. 매개 변수에 "아무것도"전달하지 않아도됩니다. 그러나 때때로 강조됩니다. 그리고 여기에 문제의 또 다른 부분이 있습니다. C #과 같은 언어는 여기에서 null이 좋은 생각인지 아닌지를 표현할 수 없습니다.
따라서 Mads가 설명하는 해상도는 다음과 같습니다.
참조가 null이 아니기를 원하는 것이 더 일반적이라고 생각합니다. Nullable 참조 유형은 더 희귀 한 유형이므로 (얼마나 많은 정보를 제공 할 수있는 좋은 데이터가 없더라도) 새 주석이 필요한 유형입니다.
언어에는 이미 nullable 값 유형의 개념과 구문이 있습니다. 둘 사이의 비유는 언어 추가를 개념적으로 더 쉽고 언어 적으로 더 간단하게 만들 것입니다.
적극적으로 원한다고 결정하지 않는 한 귀찮은 null 값으로 자신이나 소비자에게 부담을주지 않는 것이 옳은 것 같습니다. Null이없는 것이 아니라 명시 적으로 옵트 인해야하는 것이어야합니다.
원하는 기능의 예 :
public class Person
{
public string Name { get; set; } // Not Null
public string? Address { get; set; } // May be Null
}
미리보기는 Visual Studio 2017, 15.5.4+ 미리보기에서 사용할 수 있습니다.