I have a project in ASP.NET Core 6.
I have the <Nullable>enable</Nullable> setting in the project.
I have the following class:
public class ResponseResult<T>
{
public T? Result{ get; set; }
}
I can instantiate the class with a nullable or non-nullable generic parameter and the compiler does not generate a warning about it:
var a = new ResponseResult<WeatherForecast>();
var a2 = new ResponseResult<WeatherForecast?>();
My question is: why doesn't the compiler generate an error in the first case?
Since public T? Result{ get; set; } is nullable, shouldn't I be allowed to instantiate this class only with a nullable generic parameter?
This is the expected behaviour. I don't see why it should be a problem.
For
<WeatherForecast>,TisWeatherForecastandT?isWeatherForecast?.For
<WeatherForecast?>, bothTandT?areWeatherForecast?.When you declared the class this way:
You didn't say "T must be nullable for the entire
ResponseResultclass", you said "Result is a property of type T, and the property is nullable if T is a reference type".As far as I know, there is no way to actually constrain the generic type argument to have to be nullable. There is no need, as you can just use
T?inside the class.