切换语句大小写块无法识别预期的字符串值

时间:2015-03-06 11:54:40

标签: c# encoding switch-statement string-comparison cultureinfo

我在VS2013的C#里面的switch语句中发生了一个非常奇怪的问题。 switch语句计算字符串值,并且有几种情况需要特定的字符串。有些情况在传入相应的预期字符串值时起作用,其他情况则不起作用(我已经验证字符串应该通过调试匹配,但它们不会被评估为匹配,并且未按预期输入大小写块) 。有几个显而易见的事情可能会影响到这一点,最明显的可能是输入字符串具有与为每种情况定义的字符串不同的CultureInfo。但是,传递给switch语句的字符串来自同一应用程序/解决方案,使用硬编码字符串值(从类库到ASP.Net 4.0应用程序中的ascx.cs文件,两者都在同一个文件中创建)机)。我已经能够使用包含if语句的'default'case来检测以下内容:

    switch (input)
        {
            case "Expected Value 1":

                //This case works

                break;

            case "Expected Value 2":

                //This case does not work

                break;

            default:

                if (input.ToUpperInvariant() == "EXPECTED VALUE 2")
                {
                    //this evaluates to true
                }

                break;
        }

我只能通过使用ToUpperInvariant()(根据上面的默认情况下的if语句)检测到预期的字符串值,这使我怀疑可能存在一些CultureInfo问题。但是,我不明白字符串在CultureInfo方面如何与正确处理switch语句的那些值有所不同,特别是当传入的所有值都来自相同的字符串源列表时(再次)这些是硬编码的,在同一代码文件中创建的类型值,放在同一个字符串列表中,在同一个类库中)。也许CultureInfo或其他一些编码问题甚至不是问题......我不知道。我和我的团队对此非常困惑。在有人提出建议之前,我们已经意识到使用带有switch case的枚举类型作为解决这个问题的方法的想法,但是目前我们更关心的是如何发现这种情况。那里有什么想法吗?

0 个答案:

没有答案