可为空<T> 结构
Nullable<T> Structure
我阅读了 Nullable Structure 并理解了大部分内容。但是我不知道人们什么时候以及为什么会使用它。
Nullable<T>
的使用范围很广。例如,假设您有一个查询 returns 博客上特定用户的最后一个 post 的 ID:
int lastId = User.GetLastPostId();
如果用户还没有任何post,方法returns null 并导致异常。解决方案是使用 Nullable<int>
而不是 int
来避免错误。
int? lastId = User.GetLastPostId();
在这种情况下,您甚至可以检查是否为空:
if(lastId == null)
// do something
else
// do something
类似于上面的内容,假设您想在代码中使用 struct 而不是 class。至于结构体是ValueType,它不能接受空值,如果你想强制结构体接受空值,你应该将它定义为Nullable。
Struct Person
{
public string Name;
}
Person p = null; // Error
Person? p = null; // Correct
C# 具有 reference 类型(classes)和 value 类型(结构和内置类型)的概念例如 int
、bool
、DateTime
等)。
引用类型可以有一个 null
值,表明它们还没有被赋值(或者它们有 "no" 值)。
值类型最初没有可空值的概念。它们在某些上下文中具有默认值(例如 class 中的 int
字段的默认值为 0)。但是他们没有"no"值的概念。
输入Nullable<T>
.
Nullable<T>
(或其 shorthand 符号 T?
)表示可能有也可能没有值的值类型。
例如
int? foo = null; // No initial value
foo = 9; // Now it has a value
foo = null; // No value again
并且有查询该值是否存在并检索它的方法:
if (foo.HasValue)
{
int actualValue = foo.Value;
}
这很有用的一个领域是编写连接数据库的代码。许多数据库中的数字(整数)列可以配置为可为空。如果 C# 本身没有可为 null 的类型,您将需要跳过各种步骤来处理代码中的 null DB 值(例如,使用特殊的标记值来表示 null DB 值)。可空类型使它以更无缝的方式运行。
我阅读了 Nullable Structure 并理解了大部分内容。但是我不知道人们什么时候以及为什么会使用它。
Nullable<T>
的使用范围很广。例如,假设您有一个查询 returns 博客上特定用户的最后一个 post 的 ID:
int lastId = User.GetLastPostId();
如果用户还没有任何post,方法returns null 并导致异常。解决方案是使用 Nullable<int>
而不是 int
来避免错误。
int? lastId = User.GetLastPostId();
在这种情况下,您甚至可以检查是否为空:
if(lastId == null)
// do something
else
// do something
类似于上面的内容,假设您想在代码中使用 struct 而不是 class。至于结构体是ValueType,它不能接受空值,如果你想强制结构体接受空值,你应该将它定义为Nullable。
Struct Person
{
public string Name;
}
Person p = null; // Error
Person? p = null; // Correct
C# 具有 reference 类型(classes)和 value 类型(结构和内置类型)的概念例如 int
、bool
、DateTime
等)。
引用类型可以有一个 null
值,表明它们还没有被赋值(或者它们有 "no" 值)。
值类型最初没有可空值的概念。它们在某些上下文中具有默认值(例如 class 中的 int
字段的默认值为 0)。但是他们没有"no"值的概念。
输入Nullable<T>
.
Nullable<T>
(或其 shorthand 符号 T?
)表示可能有也可能没有值的值类型。
例如
int? foo = null; // No initial value
foo = 9; // Now it has a value
foo = null; // No value again
并且有查询该值是否存在并检索它的方法:
if (foo.HasValue)
{
int actualValue = foo.Value;
}
这很有用的一个领域是编写连接数据库的代码。许多数据库中的数字(整数)列可以配置为可为空。如果 C# 本身没有可为 null 的类型,您将需要跳过各种步骤来处理代码中的 null DB 值(例如,使用特殊的标记值来表示 null DB 值)。可空类型使它以更无缝的方式运行。