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

标签 c# .net casting type-conversion

我想测试给定的 object 是否可以转换为给定的 Type

在这种情况下,我有一个对象,Type 表示我想将其转换为什么类型:

public function FooBar(..., object data, Type expected) {
    ...
    var unboxedData = ?
    if (unboxedData == null) {
       ....
    }
    ...
}

如何将 data 转换为 type 表示的类型?

基本上,我想这样做:

    var unboxedData = data as Type;

...但是您当然不能将 Typeas 语句一起使用,那我该怎么办?

最佳答案

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

相关文章:

mysql - 将 MySQL 值拆分为整数

c# - MVC 模型绑定(bind)问题 - 对象列表

c# - 使用 .NET 在 Windows XP 中刻录 DVD 所需的基本 COM 组件是什么?

c# - 从 app.config 读取正则表达式和字符串

c# - 无法抑制 FxCop 警告 CA1062

c++ - 在 C++ 中将一维数组作为二维数组访问

javascript - .net 与 JS 正则表达式问题

c# - 如何使用 Rx 监控文件的变化?

c# - 从 xml 数据源读取 url

c# - 可以改进检查类型然后进行转换的代码吗?