C#:如何使用Type执行'as'操作

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)

...但当然,你不能使用Typeas语句,所以我该怎么办?

mel*_*okb 6

编辑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)

  • 如果它没有实现IConvertible会怎么样? (2认同)