C# 乌里?与可空<Uri>
C# Uri? vs. Nullable<Uri>
我一直都知道在 C# 中可以用多种方式表示可为 null 的类型,不同之处通常被描述为“语法糖”。例如,以下...
// Case 1
int? nullableIntegerVar01;
// Case #2 -
System.Nullable<int> nullableIntegerVar02;
// Case #3 -
Uri? nullableUriVar01;
// Case #4
System.Nullable<Uri> nullableUriVar02;
奇怪的是,上面的案例 #4 没有编译并抛出以下错误。
“错误 CS0453 类型 'Uri' 必须是不可为 null 的值类型才能将其用作泛型类型或方法 'Nullable' 中的参数 'T'”
我理解错误,我不明白原因 - 我希望这两种定义可空类型的方法可以互换。
此外,以下内容不起作用。
var testType = typeof(Uri);
var testNullableType = typeof(Nullable<>).MakeGenericType(testType);
任何人都可以提供见解吗?
对于值类型,例如 int 或结构(通常永远不会为 null),x?相当于 Nullable<x>
(语法糖),它创建了一个新类型。对于引用类型,例如 Uri ?仅用作注释,它不会创建新类型(无论是否存在 ? 标记,这些都可以为 null)。
文档:
https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/builtin-types/nullable-value-types
我一直都知道在 C# 中可以用多种方式表示可为 null 的类型,不同之处通常被描述为“语法糖”。例如,以下...
// Case 1
int? nullableIntegerVar01;
// Case #2 -
System.Nullable<int> nullableIntegerVar02;
// Case #3 -
Uri? nullableUriVar01;
// Case #4
System.Nullable<Uri> nullableUriVar02;
奇怪的是,上面的案例 #4 没有编译并抛出以下错误。
“错误 CS0453 类型 'Uri' 必须是不可为 null 的值类型才能将其用作泛型类型或方法 'Nullable' 中的参数 'T'”
我理解错误,我不明白原因 - 我希望这两种定义可空类型的方法可以互换。
此外,以下内容不起作用。
var testType = typeof(Uri);
var testNullableType = typeof(Nullable<>).MakeGenericType(testType);
任何人都可以提供见解吗?
对于值类型,例如 int 或结构(通常永远不会为 null),x?相当于 Nullable<x>
(语法糖),它创建了一个新类型。对于引用类型,例如 Uri ?仅用作注释,它不会创建新类型(无论是否存在 ? 标记,这些都可以为 null)。
文档:
https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/builtin-types/nullable-value-types