2013-03-19 27 views
0

我可以通过反射和调用(或者如果这个动作有更好的名字)他们可以获得演员操作符吗? 这是主要问题,如果是的话,它解决了我的问题。通过反射获取显式演员操作

但如果有人知道另一种解决方案如下:

我有很多目标瓦尔(未知量,直到运行时),每一个有不同的类型,但所有的人都号(双,是int,short) 。

另一方面,我有相同数量的双变量,并且需要比较每个变量的值。

object[] Value1; //this can be double, short or int, only known at runtime. 
double[] Value2; 

//I need simply to do: 
(for int i = 0; i < Value1.Length, i++) 
{ 
    (if Value1[i] == Value2[i]) //here's the problem 
    //the comparison always return false, because of different types 
    .... 

我tryed许多因素,包括通过反射调用“的CompareTo”的方法,但它要求德对象瓦尔是相同类型的含调用的方法的实例的的。 (不能从double调用并传递一个int参数,也不能从int调用并传递双参数)

所以,如果我可以投它们: 一种方法是从double到未知类型d不得不使用一些反射) 另一种方法是从对象到未知类型的两步转换,并从该转换为双重转换。

限制:

  • 动态不是从外部不可改变方法的一个选项(旧框架)

  • 值1项来单独地 “为对象”。

回答

1

Value1更改为double[]。如果你有一个object投入它(实例shortintdouble等),使用Convert.ToDouble(value),或者如果你有一个已知的shortint,它将被隐式转换为double。然后可以将它们与Value2中的double进行比较。

+0

忘记告诉:Value1项来自另一个程序集的方法(不可更改)。它返回值'as object'(类型为int,short或double)。这就是为什么我不能简单地将它们放入Value1的原因。会和试图将对象加倍一样。 – 2013-03-19 13:19:13

+1

@Daniel,如果Value1(不是Value1本身)的值来自现有的方法,则可以在双精度,短整数和整数上使用Convert.ToDouble(value)',并强制它们是双精度。然后,如Tim所建议的那样,Value1可以简单地为'double []'类型。 – Ruben 2013-03-19 13:26:20

+0

感谢@Ruben我已经用你的建议更新了我的答案。 – 2013-03-19 13:40:40