2013-12-14 41 views
0

我已通過使用兩種類型的int CompareTo方法與普通If條件之間的區別?

類型1試圖對兩個整數值的比較:

int val1 = 1; 
int val2 = 2; 

var returnValue = val1.CompareTo(val2);//-1 for First int is smaller. 
varreturnValue = val2.CompareTo(val1);// 1 for First int is larger 
varreturnValue = val1.CompareTo(val1);//0 for Ints are equal. 

If(varreturnValue ==1) 
{ 
    //Success 
} 
else 
{ 
    //Failure 
} 

類型2:

int val1 = 1; 
int val2 = 2; 

if (val1 < val2) 
{ 
    //return -1 //Failure 
} 
else if (val2 < val1) 
{ 
    //return 2 //Success 
} 
else 
{ 
    // return 0 // Same 
} 
  • 有什麼區別這些方法?

    • 哪一個(類型)更適合標準編碼..?

    • 任何性能差異的類型?

+1

對於您的使用案例 - 沒有真正的區別。但'CompareTo'可以通過接口'IComparable '使用,當你有一個受約束的泛型類型並想做比較時(提示:有序集合,例如二叉樹等),這是非常有用的。那麼'<' or '>'不會工作。 –

回答

2

當我走在INT的CompareTo()方法的內部偷看(使用ReSharper的),我看到:

public int CompareTo(int value) 
{ 
    if (this < value) 
    return -1; 
    return this > value ? 1 : 0; 
} 

所以它會出現在一個int的情況下,無論如何,CompareTo()函數正在做你的第二個例子。

如果我們去掉三元運算符,它看起來與你的例子:

public int CompareTo(int value) 
{ 
    if (this < value) 
    return -1; 

    if (this > value) 
    return -1; 

    return 0; 
} 
+0

但是這裏我們需要另一個條件來作爲分隔方法的返回值。好嗎? –

+0

我不確定你的意思是「條件」Ramesh。你的意思是它正在做的比較?它與第二個例子進行相同數量的比較。 –

+0

我的意思是。如果我們使用了分隔符方法,那麼我們需要檢查-1或1或0的條件以查找較大和較小的值。 –

1

在我看來,該CompareTo方法是很好的情況下,你需要單獨來檢查平等邏輯以及另一個使用比較結果的邏輯。在您的例子,當你做你的代碼,如:

int val1 = 1; 
int val2 = 2; 

if (val1 < val2) 
{ 
    //return -1 //Failure 
} 
else if (val2 < val1) 
{ 
    //return 2 //Success 
} 
else 
{ 
    // return 0 // Same 
} 

你不能到另一個功能比較結果。下面是從MSDN提取的碼:

enum Comparison { 
    LessThan=-1, Equal=0, GreaterThan=1}; 

public class ValueComparison 
{ 
    public static void Main() 
    { 
     int mainValue = 16325; 
     int zeroValue = 0; 
     int negativeValue = -1934; 
     int positiveValue = 903624; 
     int sameValue = 16325; 

     Console.WriteLine("Comparing {0} and {1}: {2} ({3}).", 
         mainValue, zeroValue, 
         mainValue.CompareTo(zeroValue), 
         (Comparison) mainValue.CompareTo(zeroValue)); 
    } 
} 

在這種情況下,比較結果被表示爲一個枚舉,並且可以是傳遞功能之間。

另一種情況是你可以甚至連載在導線作爲數字值(-1,0,1)的比較結果(Ajax調用的返回值,例如)

有可能與這樣的數字比較沒什麼關係,但正如PatrykĆwiek在他的評論中指出的那樣。 CompareTo可以通過接口使用,其可以通過其他數據類型(包括您的自定義數據類型)實現

+0

是的。你很好。但是控制檯窗口顯示1和-1。我們需要顯示出更大價值的另一個條件。那麼好? –

+0

@Ramesh Rajendran:看到我更新的答案。當您爲自定義數據類型實施比較並使用相同的界面進行比較時,這會很有幫助。 –

相關問題