2012-04-19 20 views
0

どのタイプの2つのオブジェクトも動的に比較できる汎用演算子メソッドを作成しています。例:式内のC#番号プロモーション

Object a = (int)5; 
Object b = (long)7; 
return a < b; 

これは明らかにオブジェクトが演算子を提供しないためコンパイルされません。オブジェクトをそれぞれの型にキャストすることは明らかに機能します。

ただし、実行時に型がわかりません。

.NET 4(私はできません)を使用することができれば、オブジェクトを動的にキャストすることができ、すべて正常です。しかし、私はできないので、私は式を使用してコードジェンを残しているか、またはすべての可能な型と値に対してキャストを提供していると思います!

です。

私は式を作成する場合は、オブジェクトを正しい型(簡単)にunboxする必要がありますが、次にどちらかの数値型のうち最大の数値型を宣言する必要があります。プロモーションのルールはC#の仕様書に記載されています。

私の質問は、フレームワーク内に事前に作成されたプロモーションコードがあるかどうかですか、それとも間違っているのでしょうか?

ありがとうございました。答えを

更新

感謝。私はIComparableを使用することを考えていなかったことを認めなければならない。というのも、このメソッドは数字以外にも使用されるからだ(私は明示的に言及していないが)。だから、おそらく、両方のオブジェクトがインタフェースを実装しているかどうかをチェックし、インタフェースがあればそれを使うことができます。

static bool IsLessThan<T, V>(T a, V b) where T : IComparable where V : IComparable 
{ 
    return a.CompareTo(b) < 0; 
} 

値:ジェネリックを使用して

+0

私はiPhoneでないときにコードをフォーマットします! –

+3

あなたはiPhoneですべてのことを書きましたか?あなたはIよりもニンバーの指を持っています。 –

+0

ありがとう!それはちょうど私の心の上にあった。ああ、私のためにフォーマットしたminitechに感謝! –

答えて

3

、あなたはTを使用する場合:二つの異なるタイプのためにIComparableを、あなたがオブジェクト(値)の比較メソッドを使用することができ

static bool IsLessThan<T>(T a, T b) where T : IComparable 
{ 
    return a.CompareTo(b) < 0; 
} 

int型、long型など - 既にIComparableですが、どれくらいクールですか? :)

0

最も一般的な方法は、おそらくジェネリックを使用していて、まだIComparableを実装しているタイプにジェネリックタイプを拘束し、そのCompareToメソッドを使用することです。