繁体   English   中英

为什么编译器允许使用可空和不可空泛型参数来实例化泛型类?

[英]Why does the compiler allow instantiation of generic class both with a nullable and non-nullable generic parameter?

我在 ASP.NET Core 6 中有一个项目。

我在项目中有<Nullable>enable</Nullable>设置。

我有以下课程:

public class ResponseResult<T> 
{
    public T? Result{ get; set; }
}

我可以使用可为空或不可为空的泛型参数实例化该类,并且编译器不会生成有关它的警告:

var a = new ResponseResult<WeatherForecast>();
var a2 = new ResponseResult<WeatherForecast?>();

我的问题是:为什么编译器在第一种情况下不产生错误?

public T? Result{ get; set; } public T? Result{ get; set; } public T? Result{ get; set; }为空的,难道我不应该只用一个可以为空的泛型参数来实例化这个类吗?

这是预期的行为。 我不明白为什么它应该是一个问题。

对于<WeatherForecast>TWeatherForecastT? WeatherForecast? .

对于<WeatherForecast?>TT? WeatherForecast? .

当您以这种方式声明类时:

public class ResponseResult<T> 
{
    public T? Result{ get; set; }
}

您没有说“整个ResponseResult类的 T 必须可以为空”,您说“结果是 T 类型的属性,如果 T 是引用类型,则该属性可以为空”。

据我所知,实际上没有办法将泛型类型参数限制为可以为空。 没有必要,因为您可以使用T? 课堂内。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM