2013-03-19 28 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