我有一个代码向我显示如下警告:
因为'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);
我想我可以写文化信息,但我需要在哪里以及为什么? 或者我应该改变什么。
答案 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);
}