2

オブジェクトを返すメソッドがあります。オブジェクトは、文字列、数値、ブール値など、さまざまなデータ型のいずれかです。ある時点で、このメソッドから返された 2 つの値が等しいかどうかを比較する必要があります。比較するためにさまざまな数値タイプが必要なため、==代わりに使用しています。- 文字列と数値に対しては正常に機能していますが、ブール値を比較すると何らかの理由で機能しなくなります。Equals()3 == 3.0

この問題を解決する最善の方法は何でしょうか? タイプを検出してboolの場合はキャストする必要はありませんが、他に解決策がない場合はそうします

私のコードは次のようになります。

private object GetValue() {
    // does some stuff, returns either a boolean, string or number value
}

var value1 = GetValue();
var value2 = GetValue();
if (value1 == value2) {
    // do something
}
4

2 に答える 2

3
public bool Compare(object value1, object value2)
{
    if (value1.GetType() == value2.GetType())
    {
        return value1.Equals(value2);
    }
    else
    {
        //your logic for handling different numbers
    }
}
于 2012-11-07T15:35:34.177 に答える
0

関数が文字列を返すようにし、結果を bool または int または必要なものに解析してから比較するのはどうですか?

編集:

private string GetValue() {}

string val = getValue();
string val2 = getValue();

bool a1;
bool b1;
int a2;
int b2;
double;
double;

bool r1 = bool.TryParse(val, out a1);
bool r2 = bool.TryParse(val2, out b1);
bool r3 = int.TryParse(val, out a2);
bool r4 = int.TryParse(val2, out b2);
bool r5 = double.TryParse(val, out a3);
bool r6 = double.TryParse(val2, out b3);

if ((a1 == b1 && r1 && r2)) || (a2 == b2 && r3 && r4)) || (a3 == b3 && r5 && r6))
return true;
于 2012-11-07T15:37:39.650 に答える