2014-01-08 34 views
1

“?”是什么意思?意思是在MVC中,当我们写数据类型为例如问题标记在MVC中意味着什么?

public Grade? Grade { get; set; } 

什么是“?”节目吗?如果我不写“?”会有什么不同? ?

+0

可以为空,它可以得到空值,你可以用'variable.HasValue'来检查 – Abhitalks

+0

几个小时前我正在读这个。它允许可为空的类型,但如果Grade是一个类,我不明白为什么它需要有? operator – pcnThird

+0

@pcnThird看到这个 http://www.asp.net/mvc/tutorials/getting-started-with-ef-using-mvc/creating-an-entity-framework-data-model-for-an- asp-net-mvc-application 我正在执行本教程 – MSQ

回答

6

如果你想使任何属性为空,那么我们添加问号“?”

public Grade? Grade { get; set; } - > Grade属性也会接受空值。

public Grade Grade { get; set; } - >允许该物业

2

在您的评论中提供的链接没有空值,一级代表一个枚举类型,是值类型。值类型不能指向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; 

这意味着可空类型可以使用原始值类型中的运算符。

2

?表示可为空的类型。可为空的类型表示可以赋值为null的值类型变量。您不能基于引用类型创建nullable类型,因为引用类型已经支持null

从您的教程中提供的链接:

的高档物业是一个枚举。等级类型 声明后的问号表示Grade属性可以为空。甲 级这null是从零级不同 - null表示一个档次不 已知或尚未分配

所以,在相同的示例Enrollment是引用类型,其,可为空由默认。因此在声明该类的对象时不需要明确的?

这是一个有效的可空的声明。您可以指定null它:

int? num = null; 

你也可以做一个:

int y = num.GetValueOrDefault(); 

y会得到什么价值num包含(如果它包含的值),否则null这是默认为空的类型。

您可以expicitly检查它是否包含null由:

num.HasValue(); 

你得到的值出可空的类型像这样的变量:

int y = num.value; 
0

的ID可以同时作为参数传递为空行动方法。

+1

将其作为注释发布 – piyushj