質問

Reflectionを使用して、実行時に2つの値を比較したいと思います。私はこれにcomparer.default.compare(x、y)を使用していましたが、これは適切ではないことに気付きました。ダブルを単一と比較したいとしましょう(1.0 == 10)。 Comparer.Defaultは、両方の値が同じタイプ(double)でなければならないと主張するため、例外をスローします。ただし、これには明示的な変換が存在します。これは、実際に使用したいものです。

では、なぜconvert.changeTypeを使用できないのですか? 1.25> 1(double> integer)のケースを取ります。 1.25でConvert.ChangeType(1.25、Typeof(int))を試してみると、1が取得されます。

だから、誰かがタイプが定義する明示的な比較(それが存在する場合)を呼び出す方法を提案してもらえますか?

ありがとう。

役に立ちましたか?

解決

C#4と.NET 4を使用していますか?もしそうなら、動的なタイピングを使用するのは本当に簡単です:

dynamic x = firstValue;
dynamic y = secondValue;
if (x > y) // Or whatever

コンパイラは、すべての適切な変換を実行します。

他のヒント

C#4がオプションの場合、 Jon Skeetのダイナミックを使用するという提案 おそらく理想的です。

そうでない場合は、...

明示的な比較はありません。コンパイラは、コンパイル時に変換を行い、適切な比較を呼び出します。

Convert.ChangeTypeを使用してより広いタイプに変換し、結果を比較することです。すべてのタイプのチェックを処理したくない場合は、通常、両側をに変換できます decimal 値を使用して、単一の比較を使用してそれらを確認します。 decimal すべての値を適切に処理する必要があります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top