使用私有对象访问枚举属性

时间:2016-09-30 21:08:00

标签: c# properties enums

我正在使用Private对象对单元进行单元测试。我想访问浏览器的值,这是一个枚举,并有一个不同的浏览器列表。我不断得到"运算符必须使用引用类型或可空类型"。我正在使用类似的东西:

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

UPDATE 当我使用时:

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

它工作正常,但我需要知道为什么......

1 个答案:

答案 0 :(得分:3)

您收到的错误消息会告诉您问题所在。 as运算符用于在引用类型或可空类型之间执行某些类型的转换。您的浏览器枚举是一种不可为空的值类型,因此无法与as关键字一起使用。

以下情况有效,因为您使用隐式类型browserProperty定义了var变量。在编译时,由于browserProperty方法的返回类型,object变量强类型为GetFieldOrProperty。以下两行是等效的:

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?;