Ketika angka, tanggal dan waktu diformat menjadi string atau diurai dari string budaya digunakan untuk menentukan bagaimana hal itu dilakukan. Misalnya dalam en-US
budaya 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 ToString
atau String.Format
atau diuraikan dari string menggunakan DateTime.Parse
atau Decimal.Parse
defaultnya 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.CurrentCulture
karena jika pemformatan dan penguraian dilakukan dengan budaya yang berbeda, itu bisa rusak. Dalam hal ini Anda ingin menggunakan CultureInfo.InvariantCulture
(yang didasarkan pada en-US
budaya). 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.CurrentCulture
yaitu en-US
yang 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.InvariantCulture
jika 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.