답변:
다음과 같은 일반적인 방법을 사용하십시오.
public static T Get<T>(T value)
{
return value;
}
우리가 그것을 호출 Get<string>(s)
하면 리턴은 널 입력이 불가능하며 Get<string?>(s)
, 그렇게하면 널 입력이 가능하다.
이 같은 일반적인 인수를 요구하고있다 그러나 경우 Get<T>(x)
와 T
예를 들어, 해결되지는 아래처럼 일반적인 클래스에 대한 일반적인 인수입니다 ...
class MyClass<T>
{
void Method(T x)
{
var result = Get<T>(x);
// is result nullable or non-nullable? It depends on T
}
}
여기서 컴파일러는 결국 널 입력 가능 또는 널 입력 불가능 유형으로 호출되는지 알 수 없습니다.
T
널이 될 수 없다는 신호를 보내기 위해 사용할 수있는 새로운 유형 제한이 있습니다.
public static T Get<T>(T value) where T: notnull
{
return value;
}
그러나 T
제약이없고 여전히 열려 있는 곳 에서는 널 입력 가능성을 알 수 없습니다.
이러한 미지수가 널 입력 가능으로 취급되면 다음 코드를 작성할 수 있습니다.
class MyClass<T>
{
void Method(T x)
{
var result = Get<T>(x);
// reassign result to null, cause we we could if unknown was treated as nullable
result = null;
}
}
T
널 입력이 불가능한 경우 경고가 표시되어야합니다. 따라서 알 수없는 nullable 유형을 사용하여 역 참조 할 때 경고를 표시하고 잠재적으로 할당을위한 경고를 원합니다 null
.