如何用if语句检查文本,但不检查大小写

本文关键字:不检查 大小写 文本 检查 何用 if 语句 | 更新日期: 2023-09-27 18:09:54

下面是我的代码:

      if (txtboxAntwoord.Text == lblProvincie.Text)
            {
            }

我想要实现的事情是:使if statement使它检查文本是否相同,但它不检查文本是否包含大写或小写。

假设lblProvincie's text = "Some text ",我想检查txtboxAntwoord的包含文本是否相同,但如果它包含大写文本则不重要

如何用if语句检查文本,但不检查大小写

您可以在字符串上使用.Equals方法并传入一个忽略大小写的字符串比较选项。

if (string.Equals(txtboxAntwoord.Text, lblProvincie.Text, 
               StringComparison.OrdinalIgnoreCase))

用于纯速度,其中基于文化的比较不重要

if (string.Equals(txtboxAntwoord.Text, lblProvincie.Text, 
               StringComparison.CurrentCultureIgnoreCase))

如果您需要考虑基于文化的比较。


虽然这种方法可能稍微复杂一些,但它比ToUpper()方法更有效,因为不需要分配新的字符串。它还具有能够指定不同的比较选项(如CurrentCultureIgnoreCase)的优点。

虽然在孤立的上下文中,这可能对应用程序性能没有太大影响,但在进行大量字符串比较时,这肯定会有所不同。

const string test1 = "Test1";
const string test2 = "test1";
var s1 = new Stopwatch();
s1.Start();
for (int i = 0; i < 1000000; i++)
{
    if (!(test1.ToUpper() == test2.ToUpper()))
    {
        var x = "1";
    }
}
s1.Stop();
s1.ElapsedMilliseconds.Dump();
var s2 = new Stopwatch();
s2.Start();
for (int i = 0; i < 1000000; i++)
{
    if(!string.Equals(test1, test2,
           StringComparison.OrdinalIgnoreCase))
    {
        var x = "1";
    }
}
s2.Stop();
s2.ElapsedMilliseconds.Dump();

第一个人为的例子在我的机器上进行了100万次迭代,耗时265毫秒。第二种只需要25分钟。此外,每次迭代都要创建额外的字符串。

根据Mike在评论中的建议,也分析CurrentCultureIgnoreCase是公平的。这仍然比ToUpper更有效,花费114毫秒,仍然是ToUpper的两倍多,并且不分配额外的字符串。

您可以使用ToUpper()ToLower对这两个值,使它们都有相同的大小写支持,您可以这样做:

if (txtboxAntwoord.Text.ToUpper() == lblProvincie.Text.ToUpper())

您正在寻找的是所谓的"不区分大小写的字符串比较"。

你可以用Ehsan Sajjad的建议来实现它,但这将是低效的,因为对于每次比较,你将生成至少一个(在他的例子中是两个,但这可以优化)新字符串来包含要比较的字符串的大写版本,然后立即让该字符串被垃圾收集。

David L的建议肯定会执行得更好,尽管我建议不要使用StringComparison.OrdinalIgnoreCase,因为它忽略了当前的文化。

请使用以下语句:

string.Equals( text1, text2, StringComparison.CurrentCultureIgnoreCase )