比较两个 CultureInfo 实例的最佳方法是啥?

Posted

技术标签:

【中文标题】比较两个 CultureInfo 实例的最佳方法是啥?【英文标题】:What is the best way to compare two CultureInfo instances?比较两个 CultureInfo 实例的最佳方法是什么? 【发布时间】:2014-06-25 15:41:07 【问题描述】:

背景:

我有一个组件的问题,每次调用它的特定方法后,它都会将当前线程文化更改为“en-US”。在我的过程中进一步导致问题,例如数据访问层不再工作,因为 SqlParameter 的 CultureInfo 也更改为“en-US”,因此不能再将给定的字符串解析为 DateTime SqlValue。

可能的解决方案:

所以想法是在之前备份线程当前文化,然后在调用更改当前线程文化的特定方法后恢复它。首先恢复文化时,我会检查文化是否发生了变化。

问题/问题:

我可以将备份的CultureInfo.NameThread.CurrentThread.CurrentCulture.Name 进行比较,但我也可以使用 CultureInfo 实例的.Equals() 方法。比较两个 CultureInfo 实例的更好方法是什么?是否有第三个/更好的解决方案?

【问题讨论】:

【参考方案1】:

你应该使用(因为它在比较 CultureInfo 实例时被重载了)

bool result2 = cultureInfo1.Equals(cultureInfo2); 

如本博客所示:http://www.toolheaven.net/post/2010/07/02/Beware-when-comparing-CultureInfo-instances.aspx

【讨论】:

是的,.Equals() 已重载,我测试了两个实例,例如CultureInfo("de-DE"),我在其中更改了两个对象之一的属性,然后调用了 Equals() -> 它也返回了 true - 好的。我只是想确保 :-) 我会将您的答案设置为已接受。但我认为对于我的用例来说,比较 .Name 属性就足够了。也许您对这种方法有些担忧? :-) 谢谢。 查看referencesource.microsoft.com/#mscorlib/system/globalization/…,您可以在其中了解微软如何实现equals。它检查名称和比较信息 只是为有类似问题的人提供的信息: CultureInfo.DateTimeFormat 属性未在 CultureInfo.Equals() 中检查!因此,它对我的​​特殊问题没有帮助,因为更改的 DateTimeFormat 属性导致在我的 DAL 中将字符串错误转换为日期时间。

以上是关于比较两个 CultureInfo 实例的最佳方法是啥?的主要内容,如果未能解决你的问题,请参考以下文章

比较具有相同数据但标记不同的两个 HTML 页面的最佳方法是啥

在 c# 中比较两个 pdf 文件的最佳方法是啥?

比较两个 NSArray 并检测更改的最佳方法是啥

CultureInfo 的实例(来自相同的文化)基于操作系统而改变

CultureInfo:海地克里奥尔语和 ASP.NET/MVC 上的 .NET 3.5?

比较两个复杂对象的最佳方法