2013-10-02 84 views
5

//你好,我試圖讓我的代碼工作我的比較,如果字符串大於或小於10,但它無法正常工作。它寫出10個或更多,即使該值小於10C#字符串大於或等於代碼字符串

int result = string1.CompareTo("10"); 
if (result < 0) 
{ 
    Console.WriteLine("less than 10"); 
} 
else if (result >= 0) 
{ 
    Console.WriteLine("10 or more"); 
} 
+0

你的意思是'string'或'string.Length'? –

回答

21

字符串是不是一個數字,所以你比較字典順序(從左至右)。 String.CompareTo用於訂購,但請注意"10"是「低於」"2",因爲char 1已經是低於比char 2

我想,你希望要的是將它轉換爲int什麼:

int i1 = int.Parse(string1); 
if (i1 < 10) 
{ 
    Console.WriteLine("less than 10"); 
} 
else if (i1 >= 10) 
{ 
    Console.WriteLine("10 or more"); 
} 

請注意,您應該使用int.TryParse如果string1可能有一個無效的格式。在這種方式可以防止異常在int.Parse,如:

int i1; 
if(!int.TryParse(string1, out i1)) 
{ 
    Console.WriteLine("Please provide a valid integer!"); 
} 
else 
{ 
    // code like above, i1 is the parsed int-value now 
} 

不過,如果你不是想檢查一個字符串是否是較長超過10個字符,你必須使用它的Length財產:

if (string1.Length < 10) 
{ 
    Console.WriteLine("less than 10"); 
} 
else if (string1.Length >= 10) 
{ 
    Console.WriteLine("10 or more"); 
} 
+1

當然,解決方案是正確的。 'CompareTo'處理字符串的方式很複雜,它使用文化意識的比較,在所有情況下它都不是簡單的字典排序。例如,在許多.NET文化中,短劃線「-'將被忽略。所以''-12「.CompareTo(」10「)'就像''12」.CompareTo(「10」)',它給出一個正整數('1')。和'「-1」.CompareTo(「10」)一樣,''1「.CompareTo(」10「)'爲負數('-1')。這可能是不同的.NET文化,儘管我懷疑它。 –

+3

'else if ...'seemes有點多餘:) – Silvermind

+1

我想我會讓它成爲一個tryparse,以防它不是數字。然後保持else,如果有其他的例外。 –