2014-01-08 33 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