问题标签 [invariantculture]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
120 浏览

c# - 为什么没有 char.IsUpperInvariant / char.IsLowerInvariant 方法?

Char实现方法ToLowerInvariant并将ToUpperInvariant字符转换为独立于当前文化的大写/小写。但是,没有IsUpperInvariantIsLowerInvariant方法。为什么?

0 投票
3 回答
609 浏览

c# - 任何文化中没有小数、点或逗号的十进制字符串

如果我在 C# 中有一个简单的小数,并且我想ToString在任何文化中没有任何点、逗号或小数 - 我该怎么做?

我尝试了ToString("N0")with invariantculturewhich 删除小数,但它添加了“。” 用我的语言。

做这个的最好方式是什么?

0 投票
1 回答
384 浏览

c# - .net SqlDataReader 方法是否文化不变

例如,如果我的小数以不同的文化设置存储在数据库中,并且我想通过 SqlDataReader 将它们获取到我的程序中,我真的无法找到明确的答案。将','和'。只要将 SQL-DB 中的数据类型设置为十进制,就总能正确解析并转换为我当前的文化吗?

如果它们存储在 varchar 中并尝试使用 .GetDecimal() 会发生什么?

0 投票
1 回答
121 浏览

c# - C# DateTime 解析不一致

我有一个关于 DateTime 的问题我的代码是:

结果是:

为什么 DateTime 会增加 2 小时?(我试过 ...00:05:55...)我该如何防止这种情况发生?

0 投票
2 回答
1811 浏览

c# - 在 DateTime.ParseExact 中使用 IFormatProvider 的不变区域性

在 ParseExact 方法的第一个重载中

根据微软:

如果 format 是不包含日期或时间分隔符的自定义格式模式(例如“yyyyMMddHHmm”),请使用提供程序参数的不变区域性和每个自定义格式说明符的最宽形式。例如,如果要在格式模式中指定小时,请指定较宽的格式“HH”,而不是较窄的格式“H”。

特别是如果我们使用标准格式模式,我们可以使用任何其他文化

如果我们使用不包含日期或时间分隔符的自定义格式模式,那么使用不变文化和最广泛的自定义说明符的真正目的是什么?

0 投票
3 回答
338 浏览

c# - 使用点分隔符将双精度写入文本文件

我需要用点分隔符在文本文件中写几个双精度。我知道,这段代码是解决方案:

但我有太多数字要写,所以我尝试了这个答案的方法:

并试图在全球范围内改变文化

但是第一个'{0:0.#####}'导致逗号分隔符(1,05789),CS0120中的第二个'Thread':非静态字段需要对象引用,方法,或财产。

另一个问题是:

复制字符串后的第一个对象,所以即使我写了,我也将所有数字都设为“a”

0 投票
0 回答
404 浏览

json.net - 使用 JsonConvert 将具有德国文化格式的字符串转换为双精度

我需要将 JSON 中的德国格式货币(值可能为负或正)转换为 Double,我可以使用 double.parse 并指定 NumberStyle 来完成,如下所示

但是,有多个属性需要转换,我正在寻找一种更好的方法来代替对每个属性进行解析。我正在考虑使用 JsonSerializerSettings,然后使用 Json Convert。但找不到在 JsonSerializerSettings 中指定样式的方法。

有没有更好的方法来处理这个?

0 投票
1 回答
56 浏览

c# - 在机器对机器通信场景中使用的正确字符串比较值是什么?

考虑一个场景,您正在实现旨在用于机器对机器通信的代码。典型的例子是在 Web API 操作方法中执行的代码。

假设您要在字符串之间执行完全匹配;也许您有一个用户列表,并且您希望找到一个提供用户名的特定用户:

在这种情况下,我应该使用StringComparison.OrdinalorStringComparison.InvariantCulture吗?

根据我的理解,由于我想在两个字符串之间执行完全匹配,所以这里的正确选择是StringComparison.Ordinal.

两个字符串和之间的文化敏感比较的典型示例,其中两个字符串由于语言规则而被认为是相等的,似乎不适合这里。Straßestrasse

这个假设正确吗?

如果这是正确的,您能否提供一个示例,说明使用不变文化而不是序数比较是正确的选择?

只是为了澄清,我问是因为我正在开发一个代码库,其中有大量使用不变文化的字符串比较。其中许多情况是指在机器对机器通信场景中执行的精确字符串匹配。所以我想确保清楚地理解正确选择字符串比较值背后的基本原理。

0 投票
1 回答
203 浏览

c# - 我什么时候应该使用 StringComparison.InvariantCulture 而不是 StringComparison.CurrentCulture 来测试字符串是否相等?

根据我的理解(请参阅我的另一个问题),为了决定是否使用序数或文化规则来测试字符串相等性,必须考虑执行比较的语义。

如果必须将两个比较字符串视为原始字符序列(换句话说,两个符号),则必须执行序数字符串比较。在服务器端代码中执行的大多数字符串比较都是这种情况。

示例:通过用户名执行用户查找。在这种情况下,可用用户的用户名和搜索到的用户名只是符号,它们不是特定语言的单词,因此在比较它们时无需考虑语言因素。在这种情况下,由不同字符组成的两个符号必须被认为是不同的,而不管任何语言规则。

如果必须将两个比较的字符串视为特定语言中的单词,则在比较过程中必须考虑文化规则。根据该语言的语法规则,由不同字符组成的两个字符串完全有可能在某种语言中被视为同一个单词。

示例:这两个词strasse和在德语中straße具有相同的含义。因此,在比较表示德语单词的字符串的上下文中,必须考虑这个语法规则并且这两个字符串必须被认为是相等的(想想德国市场的应用程序,其中用户输入街道名称并且街道必须在数据库中搜索,才能得到街道所在的城市)。street

到目前为止,一切都很好。

鉴于所有这些,在哪些情况下使用 .NET不变文化来实现字符串相等是有意义的?

关键是不变文化(与上面示例中提到的德国文化相反)是基于美国英语语言规则的假文化。换句话说,没有人类语言的规则基于 .NET 不变的文化,那么我为什么要使用这种虚构的文化来比较两个字符串呢?

我知道不变文化通常用于格式化和解析机器对机器通信场景中使用的字符串(例如 Web API 公开的合约)。

我想了解调用string.equalsusingStringComparison.InvariantCulture而不是StringComparison.CurrentCulture(对于某些手动设置的线程文化,以便不依赖于机器操作系统配置)真的很有意义。

0 投票
1 回答
140 浏览

.net - 在不了解文化的情况下将月份名称从一种语言转换为另一种语言?

如何在不知道“agosto”是西班牙语还是意大利语的情况下将带有“agosto”之类的月份名称的字符串转换为英文翻译“August”?

我知道我用西班牙语得到了第 8 个月的月份名称

但是我怎样才能得到字符串“August”(英文中的第 8 个月名称)作为西班牙语或意大利语月份名称“agosto”的翻译?