2016-09-30 13 views
-1

私はプライベートオブジェクトを使用してクラスをテストします。私はenumであるBrowserの値にアクセスしたいと思っています、そして、異なったブラウザのリストを持っています。私が使用している場合プライベートオブジェクトを使用してenumプロパティにアクセスする

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

UPDATE :私は.Iのようなものを使用しています「演算子は、参照型またはNULL可能タイプで使用されなければならない」得続ける

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

それは正常に動作しますが、私理由を知る必要があります。

答えて

3

エラーメッセージは、問題の内容を示しています。 as演算子は、参照型またはNULL可能型間の特定の型の変換を実行するために使用されます。あなたのブラウザの列挙型はヌル値の型ではないので、asキーワードでは使用できません。

暗黙のタイプvarを使用してbrowserProperty変数を定義しているため、次のように動作します。コンパイル時にbrowserProperty変数は、メソッドの戻り値の型のために、objectとして強く型付けされます。次の2行は等価です:あなたが明示的に列挙型に戻り値の型(オブジェクト)をキャストしているので、次の行を使用して

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

で動作します。

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

あなた本当にasキーワードを使用したい場合は、as操作の右側には、あなたの列挙型のNULL可能バージョンを使用する必要があります。本当に

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

を? –

+0

ハハハハ...... –

+0

@LB:彼が働いていたさまざまな行がなぜ働いているのかをよく説明するために私の答えを広げました。それは良い答えですか? –

関連する問題