我可以通过反射和调用(或者如果这个动作有更好的名字)他们可以获得演员操作符吗? 这是主要问题,如果是的话,它解决了我的问题。通过反射获取显式演员操作
但如果有人知道另一种解决方案如下:
我有很多目标瓦尔(未知量,直到运行时),每一个有不同的类型,但所有的人都号(双,是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项来单独地 “为对象”。
忘记告诉:Value1项来自另一个程序集的方法(不可更改)。它返回值'as object'(类型为int,short或double)。这就是为什么我不能简单地将它们放入Value1的原因。会和试图将对象加倍一样。 – 2013-03-19 13:19:13
@Daniel,如果Value1(不是Value1本身)的值来自现有的方法,则可以在双精度,短整数和整数上使用Convert.ToDouble(value)',并强制它们是双精度。然后,如Tim所建议的那样,Value1可以简单地为'double []'类型。 – Ruben 2013-03-19 13:26:20
感谢@Ruben我已经用你的建议更新了我的答案。 – 2013-03-19 13:40:40