Ketika angka, tanggal dan waktu diformat menjadi string atau diurai dari string budaya digunakan untuk menentukan bagaimana hal itu dilakukan. Misalnya dalam en-USbudaya dominan Anda memiliki representasi string ini:
- 1.000.000,00 - satu juta dengan fraksi dua digit
- 1/29/2013 - tanggal posting ini
Dalam budaya saya ( da-DK) nilai memiliki representasi string ini:
- 1.000.000,00 - satu juta dengan pecahan dua digit
- 29-01-2013 - tanggal posting ini
Dalam sistem operasi Windows, pengguna bahkan dapat menyesuaikan bagaimana angka dan tanggal / waktu diformat dan juga dapat memilih budaya lain selain budaya sistem operasinya. Format yang digunakan adalah pilihan pengguna yang seharusnya.
Jadi ketika Anda memformat nilai yang akan ditampilkan kepada pengguna menggunakan misalnya ToStringatau String.Formatatau diuraikan dari string menggunakan DateTime.Parseatau Decimal.Parsedefaultnya adalah menggunakan CultureInfo.CurrentCulture. Ini memungkinkan pengguna untuk mengontrol pemformatan.
Namun, banyak pemformatan string dan parsing sebenarnya bukan string yang dipertukarkan antara aplikasi dan pengguna tetapi antara aplikasi dan beberapa format data (misalnya file XML atau CSV). Dalam hal ini Anda tidak ingin menggunakan CultureInfo.CurrentCulturekarena jika pemformatan dan penguraian dilakukan dengan budaya yang berbeda, itu bisa rusak. Dalam hal ini Anda ingin menggunakan CultureInfo.InvariantCulture(yang didasarkan pada en-USbudaya). Ini memastikan bahwa nilai-nilai dapat bolak-balik tanpa masalah.
Alasan bahwa ReSharper memberikan peringatan adalah bahwa beberapa penulis aplikasi tidak menyadari perbedaan ini yang dapat menyebabkan hasil yang tidak diinginkan tetapi mereka tidak pernah menemukan ini karena mereka CultureInfo.CurrentCultureyaitu en-USyang memiliki perilaku yang sama dengan CultureInfo.InvariantCulture. Namun, segera setelah aplikasi digunakan dalam budaya lain di mana ada kemungkinan menggunakan satu budaya untuk memformat dan yang lain untuk mem-parsing aplikasi mungkin rusak.
Jadi untuk meringkasnya:
- Gunakan
CultureInfo.CurrentCulture(default) jika Anda memformat atau mem-parsing string pengguna.
- Gunakan
CultureInfo.InvariantCulturejika Anda memformat atau mem-parsing string yang seharusnya dapat diuraikan oleh perangkat lunak.
- Jarang menggunakan budaya nasional tertentu karena pengguna tidak dapat mengontrol bagaimana pemformatan dan penguraian dilakukan.