เมื่อตัวเลขวันที่และเวลามีการจัดรูปแบบเป็นสตริงหรือแยกวิเคราะห์จากสตริงวัฒนธรรมจะใช้ในการกำหนดวิธีการทำ เช่นในen-US
วัฒนธรรมที่โดดเด่นคุณมีการแทนค่าสตริงเหล่านี้:
- 1,000,000.00 - หนึ่งล้านด้วยเศษสองหลัก
- 1/29/2013 - วันที่โพสต์นี้
ในวัฒนธรรมของฉัน ( da-DK
) ค่ามีการแสดงสตริงนี้:
- 1.000.000,00 - หนึ่งล้านด้วยเศษสองหลัก
- 29-01-2013 - วันที่โพสต์นี้
ในระบบปฏิบัติการ Windows ผู้ใช้ยังสามารถกำหนดวิธีการจัดรูปแบบตัวเลขและวันที่ / เวลาและอาจเลือกวัฒนธรรมอื่นนอกเหนือจากวัฒนธรรมของระบบปฏิบัติการของเขา การจัดรูปแบบที่ใช้เป็นตัวเลือกของผู้ใช้ซึ่งเป็นวิธีการที่ควรจะเป็น
ดังนั้นเมื่อคุณจัดรูปแบบคุ้มค่าที่จะแสดงให้กับผู้ใช้โดยใช้ตัวอย่างToString
หรือString.Format
หรือแยกวิเคราะห์จากสตริงโดยใช้DateTime.Parse
หรือเริ่มต้นคือการใช้Decimal.Parse
CultureInfo.CurrentCulture
สิ่งนี้ทำให้ผู้ใช้สามารถควบคุมการจัดรูปแบบ
อย่างไรก็ตามการจัดรูปแบบสตริงจำนวนมากและการแยกวิเคราะห์จริง ๆ แล้วไม่ใช่การแลกเปลี่ยนสตริงระหว่างแอปพลิเคชันและผู้ใช้ แต่ระหว่างแอปพลิเคชันและรูปแบบข้อมูลบางอย่าง (เช่นไฟล์ XML หรือ CSV) ในกรณีนี้คุณไม่ต้องการใช้CultureInfo.CurrentCulture
เพราะถ้าการจัดรูปแบบและการแยกวิเคราะห์เสร็จสิ้นด้วยวัฒนธรรมที่แตกต่างมันสามารถแตกได้ ในกรณีที่คุณต้องการใช้CultureInfo.InvariantCulture
(ซึ่งเป็นไปตามen-US
วัฒนธรรม) สิ่งนี้ทำให้มั่นใจว่าค่าสามารถไปกลับได้โดยไม่มีปัญหา
ด้วยเหตุผลที่ว่า ReSharper ช่วยให้คุณมีคำเตือนคือการที่บางคนเขียนแอพลิเคชันไม่รู้จักความแตกต่างนี้ซึ่งอาจนำไปสู่ผลลัพธ์ที่ไม่ได้ตั้งใจ แต่พวกเขาไม่เคยค้นพบนี้เพราะพวกเขาCultureInfo.CurrentCulture
มีที่ซึ่งมีพฤติกรรมเช่นเดียวกับen-US
CultureInfo.InvariantCulture
อย่างไรก็ตามทันทีที่มีการใช้แอปพลิเคชันในวัฒนธรรมอื่นซึ่งมีโอกาสที่จะใช้หนึ่งวัฒนธรรมสำหรับการจัดรูปแบบและอื่น ๆ สำหรับการแยกวิเคราะห์แอปพลิเคชันอาจแตก
ดังนั้นเพื่อสรุป:
- ใช้
CultureInfo.CurrentCulture
(ค่าเริ่มต้น) หากคุณกำลังจัดรูปแบบหรือแยกสตริงผู้ใช้
- ใช้
CultureInfo.InvariantCulture
หากคุณกำลังจัดรูปแบบหรือแยกสตริงที่ควรแยกวิเคราะห์โดยซอฟต์แวร์
- ใช้วัฒนธรรมของชาติที่เฉพาะเจาะจงเนื่องจากผู้ใช้ไม่สามารถควบคุมวิธีการจัดรูปแบบและการแยกวิเคราะห์