2013-10-02 83 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,如果有其他的例外。 –