2013-03-19 3 views
0

리플렉션을 통해 캐스트 연산자를 가져 와서 호출 할 수 있습니까? 그게 주된 질문입니다. 그렇다면 문제가 해결됩니다.리플렉션을 통해 명시 적 캐스트 연산자 가져 오기

그러나 누군가가 다음에 다른 해결책을 알고있는 경우 :

을 나는 많은 개체 (런타임까지 알 수없는 수량) 바르가, 각각 다른 유형을 가지고 있지만 그들 모두가 숫자 (더블, INT, 짧은) .

다른 한편으로는, 나는 동일한 수의 double vars를 가지고 있으며 값을 각각 비교할 필요가 있습니다.

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 
    .... 

나는 반사를 통해 호출 "은 compareTo"방법을 포함하여, 여러 가지 일에 tryed했지만, 그것은 드 객체 바르 호출 방법을 포함하는 인스턴스의 같은 종류의 것을 요구한다. (double에서 호출하여 int 매개 변수를 전달하거나 int에서 호출하여 double 매개 변수를 전달할 수 없음)

따라서 캐스팅 할 수있는 경우 : 한 가지 방법은 double에서 알 수없는 유형 d는 약간의 리플렉션을 사용해야합니다.) 다른 방법은 객체에서 알 수없는 유형으로의 2 단계 캐스팅이고, 그로부터 2 단계 캐스팅입니다.

제한 :

  • 동적 외부 불변의 방법에서 옵션 (오래된 프레임 워크)

  • 값 1 항목은 "개체로"개별적으로 제공되지 않습니다.

답변

1

Value1에서 double[]으로 변경하십시오. 당신이 (short, int, double 등의 인스턴스)이 투입하는 object이있는 경우 short 또는 int 알려진, 그것은 암시 double로 변환됩니다 경우, Convert.ToDouble(value)를 사용하거나. 그런 다음 과 Value2을 비교할 수 있습니다.

+0

알려지지 않은 점 : Value1 항목은 다른 어셈블리 방식에서 가져온 것입니다. int 형, short 형 또는 double 형의'as object' 값을 반환합니다. 그래서 Value1에 단순히 넣을 수는 없습니다. 두 배로 물체를 던지려고하는 것과 같을 것입니다. –

+1

@Daniel에서 Value1의 값 (Value1 자체가 아닌)이 기존 메서드에서 나온 경우 double, shorts 및 int에 'Convert.ToDouble (value)'을 사용하여 두 배로 만들 수 있습니다. 그런 다음 Value1은 단순히 Tim이 제안한대로 double [] 형식 일 수 있습니다. – Ruben

+0

고마워요 @ 루벤 귀하의 제안에 대한 답변을 업데이트했습니다. –

관련 문제