C#中的字符串相等问题

时间:2014-03-17 15:48:23

标签: c# string string-comparison

我在C#方法中有以下if-else语句(返回一个JSON对象)。 即使if语句(language ==" en")的条件为真,else语句也会执行。 为什么是这样?该方法由另一个文件中的以下代码行调用:

Ux.locale.Manager.setConfig({
        ajaxConfig : {
            method : 'GET'
        },
        language   : 'en',
        tpl        : 'getLocale.castle?language={locale}',
        type       : 'ajax'
    });

language值与tpl值组合以生成调用该方法的网址(在我的情况下为getLocale.castle?language=en)。

    [return: JSONReturnBinder]
     public Locale GetLocale(string language)
     {
        if (language == "en")
        {
           Locale englishLang = new Locale();
           englishLang.region.center.title = "Center Region";
           englishLang.region.east.title = "East Region - Form";
           englishLang.buttons.save = "Save";
           englishLang.fields.labels.firstName = "First Name";
           englishLang.fields.labels.lastName = "Last Name";
           englishLang.fields.labels.chooseLocale = "Choose Your Locale";       
           return englishLang;
       } else {
            Locale frenchLang = new Locale();
            frenchLang.region.center.title = "Region Centre";
            frenchLang.region.east.title = "Region Est - Formulaire";
            frenchLang.buttons.save = "Enregistrer";
            frenchLang.fields.labels.firstName = "Prenom";
            frenchLang.fields.labels.lastName = "Nom";
            frenchLang.fields.labels.chooseLocale = "Choisissez vos paramètres régionaux";
            return frenchLang; 
       }
}

我尝试过使用if (language.Equals("en")),但即使这样,也会执行else语句,而不是if语句。

2 个答案:

答案 0 :(得分:1)

  

即使if语句(language ==" en")的条件为真,else语句也会执行。这是为什么?

最有可能的原因? language 等于" en" 。确保您的变量中没有任何额外的空格(常见的陷阱,有时在检查调试器时对人眼不明显)并检查外壳是否正确。

例如,尝试

language.Trim().ToLower() == "en"

很可能你的问题会消失。

答案 1 :(得分:0)

问题在于变量language被使用了两次(一次在languagelanguage : 'en'属性中,第二次在行tpl: 'getLocale.castle?language={locale}'中。这引起了混淆当language参数传递给getLocale方法时(没有传递正确的language参数)。当我更改language参数的名称时,问题就解决了,if -statement已被执行。