我正在使用Private对象对单元进行单元测试。我想访问浏览器的值,这是一个枚举,并有一个不同的浏览器列表。我不断得到"运算符必须使用引用类型或可空类型"。我正在使用类似的东西:
Browser browser = Browser.Chrome;
PrivateObject pvtObject = new PrivateObject(ClassName);
Browser browserProperty = pvtObject.GetFieldOrProperty("Browser") as Browser;
UPDATE 当我使用时:
var browserProperty = pvtObject.GetFieldOrProperty("Browser");
它工作正常,但我需要知道为什么......
答案 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?;