查看以下代码块:
//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'
我读过好几次但仍然无法理解.任何人都可以澄清这个吗?为什么object或string不支持可空引用类型?
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为非可空值类型的部分.