C# 使用CultureInfo发出警告的代码

C# 使用CultureInfo发出警告的代码,c#,asp.net,C#,Asp.net,我有一个代码,它向我显示一个警告,如: 因为“string.Format(string,object,object)”的行为可能 根据当前用户的区域设置而有所不同, 将“MethodName”中的此调用替换为对“string.Format(IFormatProvider,string,params object[])”的调用。 如果将向用户显示“string.Format(IFormatProvider,string,params object[])”的结果,请指定 “CultureInfo.C

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

因为“string.Format(string,object,object)”的行为可能 根据当前用户的区域设置而有所不同, 将“MethodName”中的此调用替换为对“string.Format(IFormatProvider,string,params object[])”的调用。 如果将向用户显示“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);
我想我可以写文化信息,但我在哪里需要,为什么需要? 或者我还应该改变什么。

字符串插值(当在字符串之前使用
$
时)只是
字符串的语法糖。Format
调用,编译器基本上会用一个替换它。您可以切换到使用重载的
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);

编辑,它看起来像是在执行
$“{{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);
    }

我认为警告本身就说明了问题。我在这里得到一个错误,说:<代码>找不到源类型的查询模式的实现“NameValueCollection.”选择“未找到”。考虑显式指定范围变量“KVP”< /代码>的类型。@ DEMoStad I错读查询。你所说的是对的。您只需要使用
string.Format
重载来修复警告。我尝试了Gilgamesh答案,但仍然收到相同的警告。我收到一条警告,说
Method'a(this NameValueCollection)'调用'string.Format(IFormatProvider,string,object,object)',并且没有为参数“1,2”提供格式项。提供的格式字符串是:“{{0}}={{1}”
我仍然得到警告感兴趣,我试图用字符串插值提供答案,但看起来可能不起作用,@juharr给出的答案应该适用于使用
String.Format
我已经更新了我的解决方案,包括了一个假设您使用
.NET 4.6