如何将C#对象拆分为动态类型

时间:2012-04-10 18:07:15

标签: c# .net reflection casting dynamictype

我正在尝试做这样的事情:

void someMethod(TypeA object) { ... }

void someMethod(TypeB object) { ... }

object getObject()
{
    if (...) return new TypeA();
    else return new TypeB();
}

object obj = getObject();
(obj.GetType()) obj;  // won't compile
someMethod(obj);

显然我在这里很困惑。我知道我可以通过写出条件语句来完成这项工作 -

if (obj.GetType() == typeof(TypeA)) obj = (TypeA)obj;
else if (obj.GetType() == typeof(TypeB)) obj = (TypeB)obj;

- 但是在运行时没有某种方法可以做到这一点吗?

修改 我同意它似乎不是最好的设计选择,所以这是上下文。上面代码的要点是Mongo DB的Repository基类。我希望它能够处理不同类型的表。所以,someMethod()实际上是 remove ; TypeA和TypeB是 ObjectID Guid ;底部的代码是类型无关的 remove 方法的一部分,该方法将ID作为字符串接受;和getObject()是一个解析ID参数的方法。

1 个答案:

答案 0 :(得分:20)

如果您使用的是.NET 4和C#4,则可以使用dynamic

dynamic obj = GetObject();
SomeMethod(obj);

否则,您将不得不使用反射来查找和调用正确的方法。重载决策(非dynamic类型)在 compile -time执行。

(请注意,除非TypeATypeB是结构,否则你不会取消装箱 ......)