2011-08-24 25 views
3

比較不同數量的類型(整型,浮點,雙,...)我有一個函數,有兩個參數,如果他們是平等的或虛假的,如果他們不返回true:在.NET

private bool isequal(object a, object b) 
{ 
    if (a != null) 
     return a.Equals(b); 
    if (b != null) 
     return b.Equals(a); 
    //if (a == null && b == null) 
     return true; 
} 

現在我想擴展這個功能。如果a和b是2個相同的數字,但是不同類型,它也應該返回true。

例如:

int a = 15; 
double b = 15; 
if (isequal(a,b)) //should be true; right now it's false 
{ //... 
} 

我已經找到了類似的問題(有答案)best way to compare double and int但A和B可以是任何類型的數字或東西比其他數字的。我如何檢查a和b是否是數字?我希望有比檢查所有現有的數字類型的.NET(的Int32,Int16的,的Int64,UInt32的,雙,十進制,...)

// 更新一個更好的辦法:我設法寫一個方法,工作得很好。然而,可能會出現一些類型小數的問題(尚未測試)。但它適用於所有其他數字類型(包括大量的Int64或UInt64)。如果有人感興趣:code for number equality

+0

我認爲你是與虎謀皮。如何比較Int64.MaxValue與float或double,並期望實現相等。沒有足夠的精度可用。 –

+0

我從來沒有預料到這一點。 Int64.MaxValue和一些float值當然永遠不會相等。但我希望它能夠正確地工作於所有可能的組合(Int64.MaxValue!= Int64.MaxValue-1,其中之一) – Preli

回答

3

您可以在a和b上使用Double.TryParse。它會處理的int,long等

private bool isequal(object a, object b) 
{ 
    if (a == null || b == null) 
     return (a == b); 

    double da, db; 
    if (Double.TryParse(a.ToString(), out da) && Double.TryParse(b.ToString(), out db)) 
     return YourIsDoubleEqualEnough(da, db); 

    return false; 
} 
+0

只有在AND b爲空時纔會達到Double.TryParse代碼,這將導致NullReferenceException! – Preli

+0

你說得對。我在上面的代碼中更改了空檢查以反映這一點。 – Donald

0

試試這個

private bool isequal(object a, object b) 
{ 
int c,d; 
     if (int.TryParse(a.ToString(), out c) && int.TryParse(b.ToString(), out d)) 
     { 
      if (c == d) 
       return true; 
     } 
if (a != null) 
    return a.Equals(b); 
if (b != null) 
    return b.Equals(a); 
//if (a == null && b == null) 
    return true; 
} 
+0

如果a或b爲空(由於a.ToString()),將產生NullReferenceException。如果a是int而b是浮點或小數,它也不會工作。 – Preli