比较两个 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.Name
与Thread.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 页面的最佳方法是啥
CultureInfo 的实例(来自相同的文化)基于操作系统而改变