我想测试给定的 object
是否可以转换为给定的 Type
。
在这种情况下,我有一个对象,Type
表示我想将其转换为什么类型:
public function FooBar(..., object data, Type expected) {
...
var unboxedData = ?
if (unboxedData == null) {
....
}
...
}
如何将 data
转换为 type
表示的类型?
基本上,我想这样做:
var unboxedData = data as Type;
...但是您当然不能将 Type
与 as
语句一起使用,那我该怎么办?
最佳答案
编辑 2: 我要说没有反射或泛型是不可能的。使用反射,您没有编译时检查,必须使用反射(或 dynamic
)进一步调用对象的方法/属性。使用泛型,您不能单独使用 Type 对象到达那里。拿你的选择。是否可以重构您的调用代码以允许泛型?
如果允许,使用通用方法可能更容易处理:
public resultType FooBar<T>(..., object data) {
...
T unboxedData = (T)data;
...
}
编辑:此外,如果包含where T : class
的通用类型约束,则可以使用data as T
:
public something FooBar<T>(..., object data)
where T : class
{
...
T unboxedData = data as T;
if (unboxedData == null) {
...
}
...
}
关于C#:如何使用类型执行 'as' 操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7504863/