【问题标题】:Ignore case and compare in C# [duplicate]忽略大小写并在 C# 中进行比较 [重复]
【发布时间】:2011-11-23 13:48:32
【问题描述】:

在进行比较之前如何将字符串转换为大写,或者是否可以通过忽略大小写来比较字符串

 if (Convert.ToString(txt_SecAns.Text.Trim()).ToUpper() == 
     Convert.ToString(hidden_secans.Value).ToUpper())

【问题讨论】:

  • 您的代码取决于区域设置。你真的想要吗?

标签: c# .net string-comparison


【解决方案1】:

使用这个:

var result = String.Compare("AA", "aa", StringComparison.OrdinalIgnoreCase);

String.Compare Method (String, String, Boolean)

【讨论】:

    【解决方案2】:

    不区分大小写的字符串比较在 C# 中是这样完成的:

    string.Equals("stringa", "stringb", StringComparison.CurrentCultureIgnoreCase)
    

    小心!此代码取决于文化;还有其他几个可用选项,请参阅http://msdn.microsoft.com/en-us/library/system.stringcomparison.aspx

    【讨论】:

    • 使用土耳其文化,此代码可以为 STRINGAstringa 返回 false。 OP 很可能希望这样做,但重要的是要意识到文化会影响不区分大小写的比较
    • 如果你希望它是文化不变的而不是使用这个string.Equals("stringa", "stringb", StringComparison.InvariantCultureIgnoreCase)
    • 这和StringComparison.OrdinalIgnoreCase有什么区别?
    【解决方案3】:

    嗯,你可以使用String.Equals(String,StringComparison) 方法。根据您的目标,只需通过 StringComparison.InvariantCultureIgnoreCaseStringComparison.CurrentCultureIgnoreCase...

    【讨论】:

      【解决方案4】:

      来自MSDN

      String.Compare 方法(字符串、字符串、布尔值):

      public static int Compare(
          string strA,
          string strB,
          bool ignoreCase
      )
      

      所以在你的情况下:

      if( String.Compare(txt_SecAns.Text.Trim(), hidden_secans.Value, true) == 0) 
      

      【讨论】:

        【解决方案5】:
        txt_SecAns.Trim().Compare(hidden_secans.Trim(), StringComparison.CurrentCultureIgnoreCase)
        

        【讨论】:

          【解决方案6】:

          string.Compare(string1, string2, true) == 0 将比较两个字符串是否相等,忽略大小写

          【讨论】:

            【解决方案7】:

            使用StringComparison.CurrentCultureIgnoreCase:

            if (txt_SecAns.Text.Trim().Equals(hidden_secans.Value.ToString(), StringComparison.CurrentCultureIgnoreCase))
            

            【讨论】:

              【解决方案8】:
              String.Compare(str1, str2, true);
              

              【讨论】:

              • 我更喜欢一种明确指定文化的方法。这使用当前的文化并不明显。
              • 是的,这个版本根据 MSDN 使用当前的文化。有一个带有第四个参数的重载,可让您明确指定区域性。
              【解决方案9】:

              就像这样:

              if (string.Compare(txt_SecAns.Text.Trim(), hidden_secans.Value.ToString(), true) == 0)
              {
                  // DoSomething
              }
              

              第三个参数true告诉string.Compare忽略大小写。

              【讨论】:

                【解决方案10】:

                我个人会像这里的每个人一样与适当的文化进行比较,但没有提出建议:

                public bool CompareStrings(string stringA, string StringB)
                {
                    return stringA.ToLower() == stringB.ToLower();
                }
                

                【讨论】:

                • 我认为由此产生的结果与使用具有相同文化的不区分大小写的比较器可能仍然不同。
                • 可以,但我认为它会解决您指出的土耳其文化问题。会吗?
                • "I".ToLower()!="i".ToLower() 在土耳其系统上。
                • 哦,哇。我没想到!好吧,我想我会坚持我的非土耳其心态! ;-)
                猜你喜欢
                • 2011-09-16
                • 2019-12-10
                • 2010-11-07
                • 2016-01-29
                • 2016-02-12
                • 2014-10-30
                • 2016-09-02
                • 1970-01-01
                • 2021-12-03
                相关资源
                最近更新 更多