1

リフレクションを介してキャスト演算子を取得し、それらを呼び出すことはできますか(またはそのアクションのより良い名前がある場合)?それが主な質問です。もしそうなら、それは私の問題を解決します。

しかし、誰かが次の別の解決策を知っている場合:

私は多くのオブジェクト変数(実行時まで不明な量)を持っており、それぞれが異なるタイプを持っていますが、それらはすべて数値(double、int、short)です。

一方、同じ数のdouble varがあり、それぞれの値を比較する必要があります。

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」メソッドを含む多くのことを試しましたが、オブジェクト変数は、呼び出されるメソッドを含むインスタンスと同じタイプである必要があります。(doubleから呼び出してintパラメーターを渡すことも、intから呼び出してdoubleパラメーターを渡すこともできません)

したがって、それらをキャストできれば、1つの方法はdoubleから未知のタイプにキャストすることです(そのためには、何らかの反射を使用する必要があります)。もう1つの方法は、オブジェクトから未知のタイプに、そしてそれからdoubleに2ステップでキャストすることです。 。

制限:

  • 動的はオプションではありません(古いフレームワーク)

  • Value1アイテムは、外部の変更不可能なメソッドから個別に「オブジェクトとして」提供されます。

4

1 に答える 1

1

に変更Value1double[]ます。objectを入れる必要がある場合( 、、、などのインスタンス) short、を使用します。または、既知のまたはを持っている場合は、暗黙的にに変換されます。これらは、のsと比較できます。intdoubleConvert.ToDouble(value)shortintdoubledoubleValue2

于 2013-03-19T13:12:07.217 に答える