什么是“?”在MVC中,当我们用数据类型编写它时,例如
public Grade? Grade { get; set; }
什么是“?”节目吗?如果我不写“?”会有什么不同?
答案 0 :(得分:6)
如果你想使任何属性可以为空,那么我们添加问号“?”
public Grade? Grade { get; set; }
- >等级属性也将接受空值。
public Grade Grade { get; set; }
- >此属性不允许空值
答案 1 :(得分:2)
Grade?
与Nullable<Grade>
相同。它是C# language feature,不是MVC特有的。
答案 2 :(得分:2)
在评论中提供的链接中,Grade表示枚举,它是值类型。值类型无法指向null,因此需要以?为后缀。用于表示空值的符号。它与说法基本相同:
public Nullable<Grade> Grade { get; set; }
更多例子:
int a = null; //not allowed
int b? = null; //allowed
string refType = null; //allowed
int x? = 2;
int y? = 2;
请记住,如果您尝试对可空类型执行操作,则操作员将被取消:
book areEqual = x == y;
转换为:
bool areEqual = (x.HasValue && y.HasValue) ? (x.Value == y.Value) : false;
这意味着可空类型可以使用原始值类型的运算符。
答案 3 :(得分:2)
?
代表可以为空的类型。可空类型表示可以赋值null
的值类型变量。您无法根据引用类型创建nullable
类型,因为引用类型已支持null
。
从您为教程提供的链接:
成绩属性是枚举。成绩类型后面的问号 声明表示Grade属性可以为空。一个品级 null是零级别 - null表示级别不是 已知或尚未分配
因此,在同一示例中,Enrollment
是一个引用类型,默认情况下可以为空。因此,在声明该类的对象时,不需要显式?
。
这是一个有效的可空声明。您可以为其指定null
:
int? num = null;
你也可以这样做:
int y = num.GetValueOrDefault();
y
将获得num
包含的任何值(如果它包含值),否则null
是可空类型的默认值。
您可以通过以下方式明确检查其是否包含null
:
num.HasValue();
您从可以为空的类型变量中获取值,如下所示:
int y = num.value;
答案 4 :(得分:0)
作为参数传递给action方法时,id可能为null。