在C#中,在switch-case代码块中比较字符串时,可以使用不同的大小写。

50 浏览
0 Comments

在C#中,在switch-case代码块中比较字符串时,可以使用不同的大小写。

我有一组switch-case语句,例如"你好,你好吗","嗨,有什么可以帮助你的吗?"。如果用户输入的是逐字逐句的"你好,你好吗",则匹配成功。

但是,如果用户输入的是"你好,你好吗",则匹配失败。

我希望如果用户的输入相同但大小写不同,也能匹配成功。即:

"你好,你好吗" == "你好,你好吗" == "你好,你好吗"

如何实现这个目标?

0
0 Comments

在C#中,switch语句对于字符串的处理仅限于精确的字符匹配。因此,有三种方法可以解决这个问题:

1. 使用if语句而不是switch语句,并利用手动字符串相等性测试,可以使用StringComparison指定大小写不敏感的比较。

2. 创建一个字典(可能是静态的),并使用大小写不敏感的键比较器,将预期的字符串放入字典中,可能将其映射到一个私有枚举输出,然后在该输出上使用switch语句。

3. 在switch操作数中使用ToLower[Invariant],并且忽略分配的开销。

如果不是高吞吐量的应用,最后一种方法可能是可以接受的。

嗯,是的,但是对于每个有意义的测试都使用whenswitch表达式实际上与一系列的ifelse测试没有什么区别,只是为了符合switch语法而已。

0
0 Comments

问题的原因:使用ToLower()函数来进行大小写不敏感的字符串比较并不是一种高效的方法。

解决方法:可以使用String.Compare()函数来进行字符串比较,该函数可以设置不区分大小写的比较规则。

下面是使用String.Compare()函数来进行字符串比较的示例代码:

switch (String.Compare(myString, "hello, how are you", StringComparison.OrdinalIgnoreCase))
{
    case 0:
        // do something
        break;
}

通过使用String.Compare()函数,并将StringComparison.OrdinalIgnoreCase作为第三个参数传入,可以实现不区分大小写的字符串比较。这种方法比使用ToLower()函数更加高效,因为它不会产生不必要的字符串对象的分配。

0
0 Comments

在C#中,使用switch-case块比较字符串时,可能会出现大小写不一致的问题。这是因为默认情况下,字符串比较是区分大小写的。解决这个问题的方法是使用StringComparison类中的IgnoreCase属性来进行比较。

在C# 7.0或更新版本中,可以使用Pattern Matching与switch-case结合使用来比较字符串。下面是一个示例代码:

string a = "Hello, How are You";
switch (a)
{
    case string str when str.Equals("hello, how are you", StringComparison.InvariantCultureIgnoreCase):
        // Your code
        break;
    default:
        // default code
        break;
}

在上述代码中,通过在case语句中使用StringComparison.InvariantCultureIgnoreCase,可以忽略字符串的大小写进行比较。这样可以确保无论字符串的大小写如何,都能正确匹配到相应的case语句。

通过使用Pattern Matching和StringComparison.InvariantCultureIgnoreCase,我们可以在switch-case块中比较字符串时忽略大小写问题,从而避免因大小写不一致而导致的错误匹配。

0