我有一个可以返回多种类型对象的方法(这就是为什么它返回一个object类型的实例)。
如何将其转换为原始类型?
(当我在运行时不知道它的类型时,问题是关于铸造它的原始类型。当我知道它的类型时,它不是关于铸造;这就是为什么GetAnyObject
方法是黑色的盒)
private void func()
{
var obj = GetAnyObject();
callFunc(obj);
}
private void callFunc(object o)
{
var a = o.GetType();
...
}
答案 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);
如果不知道困境的确切细节,很难提出一个好的解决方案; - )