Apa itu Budaya Invarian?

173

Adakah yang bisa memberikan contoh untuk menunjukkan penggunaan Budaya Invarian ? Saya tidak mengerti apa yang dijelaskan oleh dokumentasi itu.

Ricky
sumber
14
Ini bahasa Inggris, tetapi tidak dikaitkan dengan lokasi mana pun.

Jawaban:

132

Budaya invarian adalah budaya khusus yang berguna karena tidak akan berubah. Budaya saat ini dapat berubah dari satu pengguna ke yang lain, atau bahkan dari satu lari ke yang lain, sehingga Anda tidak bisa bergantung padanya tetap sama.

Mampu menggunakan budaya yang sama setiap kali sangat penting dalam beberapa aliran, misalnya, serialisasi: Anda dapat memiliki nilai 1,1 di satu budaya dan 1,1 di yang lain. Jika Anda akan mencoba menguraikan nilai "1,1" di budaya kedua, maka penguraian akan gagal. Namun Anda dapat menggunakan budaya invarian untuk mengonversi angka menjadi string dan kemudian menguraikannya kembali dari komputer mana pun dengan kumpulan budaya apa pun.

// Use some non-invariant culture.
CultureInfo nonInvariantCulture = new CultureInfo("en-US");
Thread.CurrentThread.CurrentCulture = nonInvariantCulture;

decimal dec = 1.1m;
string convertedToString = dec.ToString();

// Simulate another culture being used,
// following code can run on another computer.
nonInvariantCulture.NumberFormat.NumberDecimalSeparator = ",";

decimal parsedDec;

try
{
    // This fails because value cannot be parsed.
    parsedDec = decimal.Parse(convertedToString);
}
catch (FormatException)
{
}

// However you always can use Invariant culture:
convertedToString = dec.ToString(CultureInfo.InvariantCulture);

// This will always work because you serialized with the same culture.
parsedDec = decimal.Parse(convertedToString, CultureInfo.InvariantCulture);
Andrew Bezzub
sumber
9
Untuk apa nilainya, ini ada di System.Globalizationnamespace.
Jim H.
1
Ini akan selalu berhasil karena Anda membuat serial dengan budaya yang sama << ini tidak masuk akal bagi saya, saya pikir saya salah mengerti sesuatu. Jika menggunakan CultureInfo.InvariantCulturekarya karena Anda serial dengan budaya yang sama .... maka bukankah itu sama dengan menggunakan CultureInfo.CurrentCulture?
Alisson
3
@ Alisson Jika Anda memasukkan dua pernyataan kode Andrew terakhir kembali ke aliran asli, saya pikir itu akan lebih masuk akal. Jika Anda selalu membuat serial menggunakan CultureInfo.InvariantCulturemaka Anda tahu bahwa Anda akan selalu dapat mengurai kembali menggunakan desimal CultureInfo.InvariantCulture. Jika Anda gunakan CultureInfo.CurrentCultureuntuk membuat cerita bersambung, pengguna Anda mungkin memiliki "en-US" sebagai budaya mereka saat ini. Pengguna selanjutnya yang menguraikannya kembali ke desimal mungkin memiliki budaya saat ini yang menggunakan "," untuk pemisah.
David Specht
1
@Andrew Mungkin aku padat, tapi aku tidak bisa mengerti apa yang kamu katakan, tanpa komentar David. Saya mengedit jawaban Anda secara eksplisit.
jpaugh
111

Budaya palsu berdasarkan bahasa Inggris dengan perilaku yang jelas. Bagus untuk menulis, misalnya, memasukkan file ke dalam file konfigurasi sehingga dapat dibaca dan ditulis terlepas dari budaya yang telah ditetapkan pengguna.

Pada dasarnya itu adalah budaya spesifik yang artifisial dan tidak akan berubah .

TomTom
sumber
4
Khususnya, Anda tidak akan ketahuan dengan berbagai penggunaan koma dan poin dalam bentuk string angka, atau dengan konversi kasus ganjil.
Steve Gilham
8
Yesss ... masalah khas untuk: * Programmer Amerika yang menganggap kata itu bahasa Inggris;) Dan kemudian pelanggan Jerman menulis 1.000,00 untuk 1000;) Aduh. * Bahkan dalam bahasa yang sama, Swiss dan Jerman misalnya menggunakan "." dan "," dengan cara yang berbeda dalam angka. Hasil -> File konfigurasi adalah sampah. Gunakan Bahasa Invariant di sana;)
TomTom
23
Untuk menambahkan komentar Steve: itu adalah budaya untuk digunakan ketika Anda tidak benar-benar peduli bagaimana segala sesuatu terlihat (Anda tidak peduli apakah itu menggunakan koma atau poin atau apa pun, karena pengguna tidak akan pernah melihatnya) tetapi Anda selalu membutuhkannya menjadi sama (misalnya karena Anda harus dapat membaca apa yang telah Anda tulis).
itowlson
7

Ini digunakan untuk hal-hal yang sama terlepas dari budaya (yang tidak perlu diterjemahkan ke beberapa budaya X agar sesuai)

sebagai contoh - https://msdn.microsoft.com/en-us/library/4c5zdc6a(v=vs.100).aspx . Saat Anda menulis file khusus aplikasi yang tidak boleh dipusingkan oleh pengguna, Anda harus menggunakan InvariantCulture untuk semua metode yang menggunakan parameter budaya.

Perhatikan bahwa per dokumen yang ditautkan di atas:

Namun, aplikasi harus menggunakan kultur invarian hanya untuk proses yang membutuhkan hasil kultur-independen, seperti memformat dan mem-parsing data yang bertahan ke file.

Gishu
sumber
3
Ini berbicara kepada wajar bahwa Budaya Invarian hanya dimaksudkan untuk menjadi format perantara, yaitu jika Anda menampilkan hal-hal kepada pengguna yang merupakan output dari budaya invarian (yaitu, 'dalam' budaya invarian), Anda sedang melakukan sesuatu yang salah dan tidak mengerti budaya invarian.
mlhDev
3

Budaya invarian adalah budaya-sensitif; ini dikaitkan dengan bahasa Inggris tetapi tidak dengan negara / wilayah mana pun.

CultureInfo.InvariantCulture mengambil contoh dari budaya invarian. Ini dapat digunakan di hampir semua metode di System.Nama namespace global yang membutuhkan budaya.

Objek yang dikembalikan oleh properti seperti CompareInfo, DateTimeFormat, dan NumberFormat juga mencerminkan perbandingan string dan memformat konvensi budaya invarian. Properti InvariantCulture sangat berguna ketika Anda ingin menampilkan data tetap dalam format yang bebas budaya .

Misalnya, jika Anda ingin menampilkan angka atau waktu dalam format tertentu terlepas dari budaya aplikasi saat ini, Anda dapat menggunakan CultureInfo.InvariantCulture .

CharithJ
sumber
0

Ini adalah bahasa Inggris non-regional-universal universal sederhana dan info terkait lainnya. Ini seperti bahasa dari bahasa pemrograman itu sendiri. Anda dapat mengandalkannya dalam mengatur kalender universal; dalam situasi di mana Anda perlu membuat nama pengontrol, URL, nama delegasi ... dll. dan perlu hal-hal untuk bertindak secara alami dan universal di antara semua pengguna.

Shadi Namrouti
sumber