【问题标题】:C# String greater than or equal code stringC# String 大于或等于代码字符串
【发布时间】:2020-02-19 16:47:43
【问题描述】:

如果字符串大于或小于 10,我正在尝试让我的代码进行比较,但它不能正常工作。即使值小于 10,它也会写入 10 或更多。

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

【问题讨论】:

  • 您的意思是stringstring.Length

标签: c# string string-comparison


【解决方案1】:

字符串不是数字,因此您是按字典顺序进行比较(从左到右)。 String.CompareTo 用于排序,但请注意 "10""2"“低”,因为字符 1 已经低于字符 2

我假设您想要的是将其转换为 int:

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

请注意,如果 string1 的格式可能无效,则应使用 int.TryParse。这样可以防止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
}

但是,如果您想检查一个字符串是 longer 还是 shorter 超过 10 个字符,则必须使用它的 Length 属性:

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

【讨论】:

  • 解决方案当然是正确的。 CompareTo 处理字符串的方式很复杂,它使用文化感知比较,并且在所有情况下都不是简单的字典顺序。例如,在许多 .NET 文化中,破折号 - 将被忽略。所以"-12".CompareTo("10") 就像"12".CompareTo("10"),它给出一个正整数(1)。而"-1".CompareTo("10")"1".CompareTo("10") 一样是否定的(-1)。 可能存在不同的 .NET 文化,尽管我对此表示怀疑。
  • else if... 似乎有点多余:)
  • 我想我会把它变成一个 tryparse 以防它不是一个数字。然后保留 else if 并为此异常设置 else。
  • @JustinHarvey:一般来说,人们建议如何改进代码是件好事。但答案应该集中在要领上。否则,您会添加太多噪音,并且 OP 根本不知道他实际需要更改什么或根本问题是什么。如果他返回FormatException,我们可以通过int.TryParse 方法提供帮助。
  • @TimSchmelter:我不确定我是否同意。我认为 SO 是一个很好的资源,可以为人们的问题提供最佳答案。我认为目标应该是建议人们最好的做事方式。
猜你喜欢
  • 1970-01-01
  • 2023-03-21
  • 1970-01-01
  • 1970-01-01
  • 2016-05-09
  • 1970-01-01
  • 2013-10-09
  • 1970-01-01
  • 2015-02-05
相关资源
最近更新 更多