IEH*_*er1 8 .net c# casting type-conversion
我想测试一个给定的是否object
可以转换为给定的Type
.
在这种情况下,我有一个对象,并Type
表示我想将其强制转换为:
public function FooBar(..., object data, Type expected) {
...
var unboxedData = ?
if (unboxedData == null) {
....
}
...
}
Run Code Online (Sandbox Code Playgroud)
我data
该如何转换为类型type
代表?
基本上,我想这样做:
var unboxedData = data as Type;
Run Code Online (Sandbox Code Playgroud)
...但当然,你不能使用Type
与as
语句,所以我该怎么办?
编辑2: 如果没有反思或泛型,我会说这是不可能的.使用反射,您没有编译时检查,必须使用反射(或dynamic
)来进一步调用对象的方法/属性.使用泛型,您不能使用Type对象单独使用.随便挑选.是否可以重构您的调用代码以允许泛型?
如果允许,可以使用通用方法更轻松地处理:
public resultType FooBar<T>(..., object data) {
...
T unboxedData = (T)data;
...
}
Run Code Online (Sandbox Code Playgroud)
编辑: 此外,data as T
如果包含以下类型的泛型类型约束,则可以使用where T : class
:
public something FooBar<T>(..., object data)
where T : class
{
...
T unboxedData = data as T;
if (unboxedData == null) {
...
}
...
}
Run Code Online (Sandbox Code Playgroud)