使用CultureInfo发出警告的代码

时间:2016-01-29 18:54:48

标签: c# asp.net

我有一个代码向我显示如下警告:

  

因为'string.Format(string,object,object)'的行为可以   根据当前用户的区域设置而变化,       通过调用'string.Format(IFormatProvider,string,params object [])'替换'MethodName'中的这个调用。       如果'string.Format(IFormatProvider,string,params object [])'的结果将显示给用户,请指定   'CultureInfo.CurrentCulture'作为'IFormatProvider'参数。       否则,如果结果将由软件存储和访问,例如将其保存到磁盘或数据库时,请指定   'CultureInfo.InvariantCulture'。

它的代码是

string[] l_array = (from key in nameValueCollection.AllKeys
                    from value in nameValueCollection.GetValues(key)
                    select $"{(key)}={(value)}").ToArray();
return string.Join("&", l_array);

我想我可以写文化信息,但我需要在哪里以及为什么? 或者我应该改变什么。

2 个答案:

答案 0 :(得分:2)

字符串插值(在字符串之前使用$)只是string.Format调用的语法糖,编译器基本上将其替换为1。您可以切换为使用string.Format的重载代替IFormatProvider来修复警告。

string[] l_array = (from key in nameValueCollection
                    from value in nameValueCollection.GetValues(key)
                    select string.Format(
                        CultureInfo.InvariantCulture, 
                        "{0}={1}", 
                        key, 
                        value)).ToArray();
return string.Join("&", l_array);

答案 1 :(得分:0)

编辑,看起来$"{{key}}={{value}}".ToString(CultureInfo.InvariantCulture)无法正常工作,我已经更新了我的解决方案。

您可以使用以下内容删除此警告:

string[] l_array = (from key in nameValueCollection.AllKeys
                from value in nameValueCollection.GetValues(key)
                select InvariantCulture($"{(key)}={(value)}"))
               .ToArray();


   ...
   public static string InvariantCulture(IFormattable formattable)
    {
        return formattable.ToString(null, CultureInfo.InvariantCulture);
    }