2013-06-05 43 views
3

我看到了下面的代碼在C#示例:C#語法問題

public void AddScreen(GameScreen screen, PlayerIndex? controllingPlayer) 
{ 
    screen.ControllingPlayer = controllingPlayer; 
    screen.ScreenManager = this; 
    screen.IsExiting = false; 
} 

,我不知道什麼?是PlayerIndex後做的,它是一個枚舉,並在課堂上的每一通知背後是?。 我的問題:它做了什麼,它叫什麼,爲什麼你會用它。

我用Google搜索這一點,但它並沒有讓我遠,因爲我不知道這個編碼的名稱,谷歌過濾掉的問號在搜索查詢

+3

嘗試使用Google搜索「C#可空類型」。 –

+0

有類似的問題,試着想出更聰明的谷歌查詢。對於[c#問號](https://www.google.com/search?q=c%23+question+mark),您可以立即獲得答案。 –

+0

在SO中搜索「[C#]」?「'也可以。 –

回答

9

?,使PlayerIndex一個NULLABLE類型。

那樣,controllingPlayer可以是NULL,即使它是enum或基本類型如int

3

?nullable類型。這意味着controllingPlayer可以包含null或值。

要檢查是否有與變量相關的值,可以使用HasValue。要檢索的實際值,則使用Value

if (controllingPlayer.HasValue) 
    // now do something with controllingPlayer.Value 
3

問號表示PlayerIndex被作爲nullable類型處理。

很可能PlayerIndex不是類或結構,而是int或其他類似的枚舉或別名。如果它是一個別名,你應該找到的代碼是這樣的:

using PlayerIndex= System.Int32; 
1

?表示controllingPlayer可以爲空。它也可以寫成Nullable<PlayerIndex> controllerPlayer

當使用不能爲null的valuetypes時,這很有用,就像引用類型一樣。如果您有一個常規的int,則不能區分賦值爲0的變量和永遠不會寫入的變量。通過在Nullable<>包裝它,你現在可以檢查它是否有一個值或不:

int notNullable; //will be initialized to 0 by default. 
int? nullable; //will be initialized to null by default. 

if (nullable.HasValue)  //Do something if the variable has been given a value 
{ 

    return nullable.Value;  //get the actual int-value 
} 

查看MSDN文檔可空類型:http://msdn.microsoft.com/en-us/library/1t3y8s4s(v=vs.80).aspx

0

?添加到某個類型時,可以將其定義爲Nullable<T>(有關更多詳細信息,請參閱Nullable Types)的縮寫。這意味着通常不能表示無效的值類型可以被檢查爲非值,而不是總是訴諸其默認值(即,int,而不是默認值爲0,將默認爲null)。

您可以檢查東西是否具有價值,正是如此訪問值:

var hasValue = nullableThing.HasValue; 

var underlyingValue = nullableThing.Value;