C# 可空结构

C# 可空结构,c#,structure,nullable,C#,Structure,Nullable,我阅读并理解其中的大部分内容。但我不知道人们何时以及为什么会使用它。Nullable的用法非常广泛。例如,假设您有一个查询,返回特定用户在博客上的最后一篇文章的id: int lastId = User.GetLastPostId(); 如果用户还没有任何post,则该方法返回null并导致异常。解决方案是使用Nullable而不是int来避免错误 int? lastId = User.GetLastPostId(); 在这种情况下,您甚至可以检查是否为null: if(lastId ==

我阅读并理解其中的大部分内容。但我不知道人们何时以及为什么会使用它。

Nullable的用法非常广泛。例如,假设您有一个查询,返回特定用户在博客上的最后一篇文章的id:

int lastId = User.GetLastPostId();
如果用户还没有任何post,则该方法返回null并导致异常。解决方案是使用Nullable而不是int来避免错误

int? lastId = User.GetLastPostId();
在这种情况下,您甚至可以检查是否为null:

if(lastId == null)
    // do something
else
    // do something
如上所述,假设您希望在代码中使用struct而不是class。就结构为ValueType而言,它不能接受null值,如果要强制结构接受null值,则应将其定义为可为null

Struct Person
{
    public string Name;
}

Person p = null; // Error
Person? p = null; // Correct
C具有引用类型、类和值类型、结构和内置类型(如int、bool、DateTime等)的概念

引用类型可以有一个空值,表示它们尚未被赋值或没有值

值类型最初没有可空值的概念。它们在某些上下文中具有默认值,例如,类中的int字段具有默认值0。但是他们没有没有没有价值的概念

输入Nullable

Struct Person
{
    public string Name;
}

Person p = null; // Error
Person? p = null; // Correct
可为空还是T的简写符号?指示可能有值也可能没有值的值类型

e、 g

还有一些方法可以查询该值是否存在并检索该值:

if (foo.HasValue)
{
    int actualValue = foo.Value;
}

在编写连接到数据库的代码时,这一点非常有用。许多数据库中的数字整数列可以配置为可为空。如果C本身没有可为null的类型,则需要跳转处理代码中的null DB值,例如,使用特殊的sentinel值来表示null DB值。可空类型使此操作更加无缝。

这将是主观的,主要是基于意见的,也太广泛了,但您能为我指出正确的方向吗@Pikachu请注意,VisualStudio标签是用于IDE问题的。可能范围很广,但我不认为这是主观的还是基于观点的。