为什么我不能将通用列表声明为可空?

Exi*_*tos 20 c# null nullable

我试图使用以下代码:

private Nullable<List<IpAddressRange>> ipAddressRangeToBind;
Run Code Online (Sandbox Code Playgroud)

但我收到以下警告:

类型List必须是非可空值类型,以便在泛型类型或方法'System.Nullable'中将其用作参数'T'.

Jon*_*eet 49

List<T>已经是一个引用类型(对于任何类型T) - 您只能声明Nullable<T>哪里T是不可为空的值类型(它被声明为Nullable<T> where T : struct).

但那没关系,因为如果你刚宣布:

private List<IpAddressRange> ipAddressRangeToBind;
Run Code Online (Sandbox Code Playgroud)

然后你还可以拥有

ipAddressRangeToBind = null;
Run Code Online (Sandbox Code Playgroud)

因为引用类型总是可以为空的.


Cad*_*oux 10

List<IpAddressRange> 是一个引用类型 - 它已经可以为空 - 实际上它将被该声明初始化为null.


Roe*_*rel 6

您可以按原样使用它:

List<IpAddressRange> ipAddressRangeToBind = null;  
Run Code Online (Sandbox Code Playgroud)

列表已经可以为空了.

  • 我想因为正如Jon Skeet所解释的那样,约束是`Nullable <T>,其中T:struct`和`IpAddressRange`不是`struct`.为什么要求约束?那是一个不同的问题:) (2认同)