วิธีที่ดีที่สุดในการเปรียบเทียบสองอินสแตนซ์ CultureInfo คืออะไร

พื้นหลัง:

ฉันมีปัญหากับส่วนประกอบซึ่งเปลี่ยนวัฒนธรรมเธรดปัจจุบันเป็น "en-US" ทุกครั้งหลังจากการเรียกไปยังวิธีการเฉพาะของมัน นอกจากนี้ในกระบวนการของฉันที่นำไปสู่ปัญหาเช่น เลเยอร์การเข้าถึงข้อมูลไม่ทำงานอีกต่อไปเนื่องจาก CultureInfo ของ SqlParameter ได้รับการเปลี่ยนเป็น "en-US" ด้วย ดังนั้นสตริงที่กำหนดจึงไม่สามารถแยกวิเคราะห์เป็น DateTime SqlValue อีกต่อไป

วิธีแก้ปัญหาที่เป็นไปได้:

ดังนั้นแนวคิดก็คือการสำรองข้อมูลเธรดวัฒนธรรมปัจจุบันก่อนและเรียกคืนในภายหลังการเรียกไปยังวิธีการเฉพาะซึ่งเปลี่ยนวัฒนธรรมเธรดปัจจุบัน เมื่อฟื้นฟูวัฒนธรรม ก่อนอื่นฉันจะตรวจสอบวัฒนธรรมว่ามีการเปลี่ยนแปลงหรือไม่

ปัญหา/คำถาม:

ฉันสามารถเปรียบเทียบ CultureInfo.Name ที่สำรองข้อมูลไว้กับ Thread.CurrentThread.CurrentCulture.Name ได้ แต่ฉันสามารถใช้เมธอด .Equals() ของอินสแตนซ์ CultureInfo ได้ วิธีไหนดีกว่าในการเปรียบเทียบสองอินสแตนซ์ CultureInfo อาจมีวิธีแก้ปัญหาที่สามหรือดีกว่านี้ไหม


person Kr15    schedule 25.06.2014    source แหล่งที่มา


คำตอบ (1)


คุณควรใช้ (เนื่องจากมีการใช้งานมากเกินไปสำหรับการเปรียบเทียบอินสแตนซ์ CultureInfo)

bool result2 = cultureInfo1.Equals(cultureInfo2); 

ดังที่แสดงในบล็อกนี้: https://web.archive.org/web/20180911110507/http://www.toolheaven.net/post/2010/07/02/Beware-when-comparing-CultureInfo-instances.aspx

person Rico Suter    schedule 25.06.2014
comment
ใช่ .Equals() มีการโหลดมากเกินไป และฉันทดสอบสองอินสแตนซ์เช่น CultureInfo(de-DE) โดยที่ฉันเปลี่ยนคุณสมบัติของหนึ่งในสองวัตถุ และหลังจากนั้นเรียกว่า Equals() -› มันก็คืนค่าเป็นจริงเช่นกัน - ตกลง ฉันแค่อยากให้แน่ใจว่า :-) ฉันจะตั้งคำตอบของคุณว่าได้รับการยอมรับแล้ว แต่ฉันคิดว่าสำหรับกรณีการใช้งานของฉัน การเปรียบเทียบคุณสมบัติ .Name ก็เพียงพอแล้ว บางทีคุณอาจมีข้อกังวลกับแนวทางดังกล่าว? :-) ขอบคุณ. - person Kr15; 27.06.2014
comment
ดูที่ referencesource.microsoft.com/#mscorlib/system/globalization/ ซึ่งคุณสามารถดูได้ว่า Microsoft นำไปใช้อย่างเท่าเทียมกันอย่างไร มันจับคู่ชื่อและเปรียบเทียบข้อมูล - person Rico Suter; 28.06.2014
comment
เป็นเพียงข้อมูลสำหรับผู้ที่มีปัญหาคล้ายกัน: ไม่ได้ตรวจสอบคุณสมบัติ CultureInfo.DateTimeFormat ใน CultureInfo.Equals()! ดังนั้น จึงไม่ช่วยฉันแก้ไขปัญหาพิเศษ เนื่องจากคุณสมบัติ DateTimeFormat ที่เปลี่ยนแปลงนำไปสู่การแปลงข้อผิดพลาดของสตริงเป็น datetime ใน DAL ของฉัน - person Kr15; 09.07.2014