使用 CultureInfo 发出警告的代码
Posted
技术标签:
【中文标题】使用 CultureInfo 发出警告的代码【英文标题】:Code giving warning with CultureInfo 【发布时间】:2016-01-29 18:54:48 【问题描述】:我有一个代码向我显示如下警告:
因为 '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);
我认为我可以编写文化信息,但我在哪里以及为什么需要它? 或者我还应该改变什么。
【问题讨论】:
我认为警告是不言自明的。 【参考方案1】:编辑,看起来$"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);
【讨论】:
我仍然收到警告 有趣,我试图提供字符串插值的答案,但看起来这可能行不通,@juharr 给出的答案应该适用于使用String.Format
我已经更新了我的解决方案,以包含一种方法,假设您使用的是 .NET 4.6
【参考方案2】:
字符串插值(当您在字符串之前使用$
时)只是string.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);
【讨论】:
我在这里收到一条错误消息:。Could not find an implementation of the query pattern for source type "NameValueCollection'. 'Select' not found. Consider explicitly specifying the type of the range variable 'kvp'
.
@demostack 我错过了查询。你所拥有的是正确的。您只需要使用string.Format
重载来修复警告。
我试过 Gilgamesh Answer 但我仍然收到同样的警告。
我收到警告说Method 'A(this NameValueCollection)' calls 'string.Format(IFormatProvider, string, object, object)' and does not provide a format item for argument "1, 2". The provided format string is: '"0=1"
以上是关于使用 CultureInfo 发出警告的代码的主要内容,如果未能解决你的问题,请参考以下文章
当 HTML 标签包含在 JavaScript 代码中时,如何使 JSHint 发出警告?