C# Nullable<;布尔>;还有布尔?
当我对我的类进行反向工程时,我得到以下结果:C# Nullable<;布尔>;还有布尔?,c#,C#,当我对我的类进行反向工程时,我得到以下结果: public Nullable<bool> Correct { get; set; } public Nullable<bool> Response { get; set; } 有人能告诉我这两者有什么不同吗。我以前没有见过Nullable,我不知道为什么它不只是创建一个“bool” 注意:我把代码改成布尔了?回应Jon的评论可以将值赋值为true或false或null。在处理数据库和其他数据类型时,为数值和布尔类型指定n
public Nullable<bool> Correct { get; set; }
public Nullable<bool> Response { get; set; }
有人能告诉我这两者有什么不同吗。我以前没有见过Nullable
,我不知道为什么它不只是创建一个“bool”
注意:我把代码改成布尔了?回应Jon的评论可以将值赋值为true或false或null。在处理数据库和其他数据类型时,为数值和布尔类型指定null的功能尤其有用,因为这些数据类型包含可能未指定值的元素。例如,数据库中的布尔字段可以存储值true或false,也可以是未定义的。”
是可为空
和bool
之间存在差异
public Nullable<bool> Correct { get; set; } // can assign both true/false and null
Correct = null; //possible
也许之前编码的人可能没有接触到bool?
dataType
系统。可为空的
相当于bool?
更新:在Nullable
和bool?
有人能告诉我这两者有什么不同吗
我以前没有见过null,我也不知道为什么会
不仅仅是创造一个“bool”
从技术上讲,Nullable和bool?没有区别。无论你写什么,它们都会在IL中编译为Nullable。所以没有区别。它只是C#编译器语法
为什么要求系统为空
这是因为它被用作类型
。类型需要位于命名空间
中
但是bool和bool?有区别。因为bool是一种简单的值类型,不能为其赋值为null值,而您可以为bool?赋值
Nullable
表示可分配为null的值类型
,它位于命名空间System
中
此外,由于可以将其赋值为null,因此您可以检查它是否有这样的值
if(Correct.HasValue)
{
//do some work
}
没有区别
提示:Nullable n;//不允许
Nullable
和bool?
是等价的(“?”后缀是一种语法糖)。
Nullable
表示除了典型的bool
值:true和false,
还有第三个值:null
如果您使用不确定的值,例如在某些情况下,空值可能很有用
如果有响应,则无法判断实例是否正确
已经给出;例如,在您的案例中
// true - instance is correct
// false - instance is incorrect
// null - additional info required
public bool? Correct { get; set; }
// true - response was given
// false - no response
// null - say, the response is in the process
public bool? Response { get; set; }
我怀疑你实际上编写了public bool?Correct{get;set;}
。编译器不会自动将bool
转换为bool?
。您确定没有编写bool?
而不是bool
?我注意到Nullable需要系统名称空间,但bool?不需要。有人知道这是什么吗?如果使用其他工具对代码进行反向工程,它可能会生成>bool?
back-这应该是对你的一个提示,没有区别-逆向工程工具无法知道你写的两个代码中的哪一个。bool?
只是C编译器为方便你而定义的一个别名。这并不能解释OP的情况-我怀疑这是一个误诊。@Jon-现在我意识到数据库允许空值,而我的代码不允许。数据库脚本是由我们的DBA完成的,我对类进行了编码(不正确)。我仍然想知道为什么逆向工程不只是指定bool?嗯,至少现在你还可以对数据库进行健全性检查。我将代码改为使用Nullable,现在它要求我包含系统名称空间。那么它们真的是一样的吗?@AlanNullable
和bool?
类似于int
和System.Int32
。它们只是表示同一事物的两种方式。您必须添加系统
名称空间,因为您使用的是较长的版本,就像如果您使用Int32
而不是int
,则需要添加系统
一样。您好。我刚刚因为您的答案而对您进行了投票。请注意,我现在将代码更改为布尔?我意识到这是我的错。@Alan没有区别,被称为alias。
if(Correct.HasValue)
{
//do some work
}
// true - instance is correct
// false - instance is incorrect
// null - additional info required
public bool? Correct { get; set; }
// true - response was given
// false - no response
// null - say, the response is in the process
public bool? Response { get; set; }