如何用if语句检查文本,但不检查大小写
本文关键字:不检查 大小写 文本 检查 何用 if 语句 | 更新日期: 2023-09-27 18:09:54
下面是我的代码:
if (txtboxAntwoord.Text == lblProvincie.Text)
{
}
我想要实现的事情是:使if statement
使它检查文本是否相同,但它不检查文本是否包含大写或小写。
假设lblProvincie's
text = "Some text ",我想检查txtboxAntwoord
的包含文本是否相同,但如果它包含大写文本则不重要
您可以在字符串上使用.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 )