McG*_*gle 10 .net c# 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);
Run Code Online (Sandbox Code Playgroud)
显然我在这里很困惑.我知道我可以通过写出条件陈述来完成这项工作 -
if (obj.GetType() == typeof(TypeA)) obj = (TypeA)obj;
else if (obj.GetType() == typeof(TypeB)) obj = (TypeB)obj;
Run Code Online (Sandbox Code Playgroud)
- 但是有没有办法在运行时这样做?
编辑 我同意它似乎也许不是最好的设计选择,所以这是上下文.上面代码的要点是Mongo DB的Repository基类.我希望它能够处理不同类型的表.所以,someMethod()实际上是删除的 ; TypeA和TypeB是ObjectID和Guid ; 底部的代码是类型不可知的删除方法的一部分,它接受ID作为字符串; 和getObject()是一个解析ID参数的方法.
Jon*_*eet 20
如果您使用的是.NET 4和C#4,则可以使用dynamic以下内容:
dynamic obj = GetObject();
SomeMethod(obj);
Run Code Online (Sandbox Code Playgroud)
否则,您将不得不使用反射来查找和调用正确的方法.过载分辨率(非dynamic类型)在编译时执行.
(请注意,除非TypeA和TypeB是结构,你就不会拆箱反正...)