2016-09-30 66 views
-1

我正在使用私有對象來單元測試一個類。我想訪問瀏覽器的值,這是一個枚舉,並有一個不同的瀏覽器列表。我不斷收到「操作必須用引用類型或可空類型可以使用」。我是用這樣的:使用私有對象訪問枚舉屬性

 Browser browser = Browser.Chrome; 
     PrivateObject pvtObject = new PrivateObject(ClassName); 
     Browser browserProperty = pvtObject.GetFieldOrProperty("Browser") as Browser; 

UPDATE 當我使用:

var browserProperty = pvtObject.GetFieldOrProperty("Browser"); 

它工作正常,但我需要知道爲什麼..

回答

3

您收到的錯誤消息告訴你你的問題是什麼。 as運算符用於在引用類型或可爲空的類型之間執行某些類型的轉換。您的瀏覽器枚舉是不可爲空的值類型,因此不能與as關鍵字一起使用。

以下原因是因爲您正在使用隱式類型var定義browserProperty變量。在編譯時,由於GetFieldOrProperty方法的返回類型,browserProperty變量的強類型爲object。下面兩行是等價的:

var browserProperty = pvtObject.GetFieldOrProperty("Browser"); 
object browserProperty = pvtObject.GetFieldOrProperty("Browser"); 

使用以下行的作品,因爲你明確地鑄造的返回類型(的對象)來枚舉。

Browser browserTypeProperty = (Browser)pvt_Object.GetFieldOrProperty("Browser"); 

如果你真的使用as關鍵字,在as操作的右側必須使用枚舉的可空版本:

Browser? browserProperty = pvtObject.GetFieldOrProperty("Browser") as Browser?; 
+0

真的嗎?我正在等待你得到一些repv積分downvote :) –

+0

Hahahahaa ...... –

+0

@LB:擴大我的答案,以更好地解釋他爲什麼使用不同的行工作。這是更好的答案嗎? –