如何将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是ObjectID和Guid ; 底部的代码是类型不可知的删除方法的一部分,该方法将ID作为字符串接受; 和getObject()是一个解析ID参数的方法。
如果您使用的是.NET 4和C#4,则可以使用dynamic
:
dynamic obj = GetObject(); SomeMethod(obj);
否则,您将不得不使用reflection来查找和调用正确的方法。 过载分辨率(对于非dynamic
类型)在编译时执行。
(请注意,除非TypeA
和TypeB
是结构体,否则无论如何都不会取消装箱 ……)
上述就是C#学习教程:如何将C#对象拆分为动态类型分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/1010856.html