C# 使用CultureInfo发出警告的代码
我有一个代码,它向我显示一个警告,如: 因为“string.Format(string,object,object)”的行为可能 根据当前用户的区域设置而有所不同, 将“MethodName”中的此调用替换为对“string.Format(IFormatProvider,string,params object[])”的调用。 如果将向用户显示“string.Format(IFormatProvider,string,params object[])”的结果,请指定 “CultureInfo.CurrentCulture”作为“IFormatProvider”参数。 否则,如果结果将由软件存储和访问,例如在将其持久化到磁盘或数据库时,请指定 “CultureInfo.InvariantCulture” 它的代码是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[] 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