아래와 같이 DTO (Data Transfer Object) 클래스가있는 프로젝트에서이 기능을 활성화했습니다.
public class Connection
{
public string ServiceUrl { get; set; }
public string? UserName { get; set; }
public string? Password { get; set; }
//... others
}
하지만 오류가 발생합니다.
CS8618
: 널 입력 불가능 특성 'ServiceUrl'이 초기화되지 않았습니다. 속성을 nullable로 선언하십시오.
이것은 DTO 클래스이므로 속성을 초기화하지 않습니다. 이 속성은 null이 아닌지 확인하기 위해 클래스를 초기화하는 코드의 책임입니다.
예를 들어, 발신자는 다음을 수행 할 수 있습니다.
var connection = new Connection
{
ServiceUrl=some_value,
//...
}
내 질문 : C # 8의 nullability 컨텍스트가 활성화되어있을 때 DTO 클래스에서 이러한 오류를 처리하는 방법은 무엇입니까?
Plain Old C# Object
합니다. 특별한 클래스에서 상속받지 않고 다른 객체처럼. 다른 질문 이 있다고 생각합니다 . - DTO들 만드는 방법Data Transfer Objects
This should be the responsibility of the one initializing the class to ensure that the properties are non-null
클래스는 항상 유효한 상태 여야합니다. null
허용되지 않는 경우 속성은 null 이 아니 어야합니다 . 아마도 기본 문자열 대신 None
F #의 Option 클래스와 같이 값이 없거나 누락 된 URL에 특수 클래스를 사용해야합니다 . C # 8은 같은 클래스를 작성하고 패턴 매칭로를 확인할 수 있습니다
public string ServiceUrl { get; set; } = default! ;
. Roslyn이 앞으로 ctor의 범위 밖에서 늦은 초기화를 처리하는 방법을 가질 수 있기를 바랍니다. 옵션 클래스와 같은 MayBe <T>를 사용하고 있었지만 새 코드를 위해 c # 8에서 nullable Reference Type으로 전환했습니다.