为什么字符串或对象类型不支持可空引用类型?

Ank*_*kar 0 c# nullable

查看以下代码块:

//Declaring nullable variables.
//Valid for int, char, long...
Nullable<int> _intVar;
Nullable<char> _charVar;

//trying to declare nullable string/object variables
//gives compile time error. 
Nullable<string> _stringVar;
Nullable<object> _objVar;
Run Code Online (Sandbox Code Playgroud)

编译代码编译器时会出现以下错误消息:

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

我读过好几次但仍然无法理解.任何人都可以澄清这个吗?为什么objectstring不支持可空引用类型?

Jon*_*eet 8

object并且string是引用类型,因此它们已经可以为空.例如,这已经有效:

string x = null;
Run Code Online (Sandbox Code Playgroud)

Nullable<T>泛型类型仅适用于其中的情况下T是一个非空的类型.

在声明中Nullable<T>有一个限制T:

public struct Nullable<T> where T : struct
Run Code Online (Sandbox Code Playgroud)

where T : struct正是限制T为非可空值类型的部分.