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

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

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()实际上是删除 ; TypeA和TypeB是ObjectIDGuid ; 底部的代码是类型不可知的删除方法的一部分,该方法将ID作为字符串接受; 和getObject()是一个解析ID参数的方法。

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

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

否则,您将不得不使用reflection来查找和调用正确的方法。 过载分辨率(对于非dynamic类型)在编译时执行。

(请注意,除非TypeATypeB是结构体,否则无论如何都不会取消装箱 ……)