如何将对象转换为原始类型?

时间:2015-09-09 11:57:19

标签: c# dynamic reflection

我有一个可以返回多种类型对象的方法(这就是为什么它返回一个object类型的实例)。

如何将其转换为原始类型? (当我在运行时不知道它的类型时,问题是关于铸造它的原始类型。当我知道它的类型时,它不是关于铸造;这就是为什么GetAnyObject方法是黑色的盒)

private void func()
{
    var obj = GetAnyObject();
    callFunc(obj);
}
private void callFunc(object o)
{
    var a = o.GetType();
    ...
}

1 个答案:

答案 0 :(得分:1)

如果可能的类型有共同点,您可能需要创建一个所有这些类型实现的接口,并将结果转换为该接口类型。

private void func()
{
    var obj = (IMyInterface)GetAnyObject();
    callFunc(obj);
}

private void callFunc(IMyInterface o)
{
    ...
}

在你的一条评论中,你说对象是一个数组。也许IEnumerable就足够了吗?

修改

您声明您使用的第三方代码无法更改。因此,您获得的所有对象必须具有共同点,以使您的代码至少有点通用。否则,对于不同的场景,您最终会得到很多if个。我想到的一件事是通过反射检索MemberInfo对象并调用它。假设所有类型都定义了该成员。我在谈论类似于以下内容:

MethodInfo someMethod = obj.GetType().GetMethod("M");
object result = someMethod.Invoke(obj);

如果不知道困境的确切细节,很难提出一个好的解决方案; - )