由于使用的框架的限制,有时候传参只能传一个参数, 所以需要把业务参数放到一个 object[] 里, 现在问题是, 如何能够动态cast地这些参数呢?下面是 伪代码
objects[] args = new object[3];// 这几类是不确定的,下一次有可能是 Class4,Class5,Class6
args[0] = new Class1();
args[1] = new Class2();
args[2] = new Class3();logic.RPC("SomeMthod",args);
在 logic,RPC 里, 如何把这些类相应地cast回去呢?
最直观的就是 一堆 if else, 但是以后在更新版本时,每次都要改动这里, 请问有什么办法动态cast 么?if(args[x0] == classy0 )
DoSomething();
else if(args[x1] == classy1 )...

解决方案 »

  1.   

    用反射
    args[0].GetType().Assembly.CreateInstance
      

  2.   


    不好意思,我没看明白。 我想达到的效果是这样:
    if(args[0].GetType() == class1 )
        Class1 c1 = (Class1)args[0]
        DoSomethingForClass1();
    else if(args[1].GetType() == class2 )
        Class2 c2 = (Class2)args[1]
        DoSomethingForClass2();....
      

  3.   

    你给的例子里面,c1\c2在后续中没用到。如果你可以做个接口,继承同一个接口,那么就不要用if进行判断了。