Properti System.Globalization.CultureInfo.InvariantCulture

Artikel ini menyediakan keterangan tambahan untuk dokumentasi referensi untuk API ini.

Budaya invarian tidak peka terhadap budaya; ini dikaitkan dengan bahasa Inggris tetapi tidak dengan negara/wilayah mana pun. Anda menentukan budaya invarian berdasarkan nama dengan menggunakan string kosong ("") dalam panggilan ke CultureInfo metode instantiation. Properti ini, CultureInfo.InvariantCulture, juga mengambil instans budaya invarian. Ini dapat digunakan dalam hampir semua metode di System.Globalization namespace layanan yang membutuhkan budaya. Objek yang dikembalikan oleh properti seperti CompareInfo, DateTimeFormat, dan NumberFormat juga mencerminkan perbandingan string dan konvensi pemformatan budaya invarian.

Tidak seperti data sensitif budaya, yang dapat berubah berdasarkan kustomisasi pengguna atau dengan pembaruan pada .NET Framework atau sistem operasi, data budaya yang invarian stabil dari waktu ke waktu dan di seluruh budaya yang diinstal dan tidak dapat disesuaikan oleh pengguna. Hal ini membuat budaya invarian sangat berguna untuk operasi yang memerlukan hasil independen budaya, seperti operasi pemformatan dan penguraian yang mempertahankan data yang diformat, atau operasi pengurutan dan pengurutan yang mengharuskan data ditampilkan dalam urutan tetap terlepas dari budaya.

Operasi string

Anda dapat menggunakan budaya invarian untuk operasi string sensitif budaya yang tidak terpengaruh oleh konvensi budaya saat ini dan yang konsisten di seluruh budaya. Misalnya, Anda mungkin ingin mengurutkan data muncul dalam urutan tetap atau menerapkan serangkaian konvensi casing standar ke string terlepas dari budaya saat ini. Untuk melakukan ini, Anda meneruskan InvariantCulture objek ke metode yang memiliki CultureInfo parameter, seperti Compare(String, String, Boolean, CultureInfo) dan ToUpper(CultureInfo).

Menyimpan data

InvariantCulture Properti dapat digunakan untuk mempertahankan data dalam format independen budaya. Ini menyediakan format yang diketahui yang tidak berubah dan yang dapat digunakan untuk menserialisasikan dan mendeserialisasi data di seluruh budaya. Setelah data dideserialisasi, data dapat diformat dengan tepat berdasarkan konvensi budaya pengguna saat ini.

Misalnya, jika Anda memilih untuk mempertahankan data tanggal dan waktu dalam bentuk string, Anda dapat meneruskan InvariantCulture objek ke DateTime.ToString(String, IFormatProvider) metode atau DateTimeOffset.ToString(IFormatProvider) untuk membuat string, dan Anda dapat meneruskan InvariantCulture objek ke DateTime.Parse(String, IFormatProvider) metode atau DateTimeOffset.Parse(String, IFormatProvider, DateTimeStyles) untuk mengonversi string kembali ke nilai tanggal dan waktu. Teknik ini memastikan bahwa nilai tanggal dan waktu yang mendasar tidak berubah ketika data dibaca atau ditulis oleh pengguna dari budaya yang berbeda.

Contoh berikut menggunakan budaya invarian untuk mempertahankan DateTime nilai sebagai string. Kemudian mengurai string dan menampilkan nilainya dengan menggunakan konvensi pemformatan budaya Prancis (Prancis) dan Jerman (Jerman).

using System;
using System.IO;
using System.Globalization;

public class Example
{
   public static void Main()
   {
      // Persist the date and time data.
      StreamWriter sw = new StreamWriter(@".\DateData.dat");

      // Create a DateTime value.
      DateTime dtIn = DateTime.Now;
      // Retrieve a CultureInfo object.
      CultureInfo invC = CultureInfo.InvariantCulture;

      // Convert the date to a string and write it to a file.
      sw.WriteLine(dtIn.ToString("r", invC));
      sw.Close();

      // Restore the date and time data.
      StreamReader sr = new StreamReader(@".\DateData.dat");
      String input;
      while ((input = sr.ReadLine()) != null)
      {
         Console.WriteLine("Stored data: {0}\n" , input);

         // Parse the stored string.
         DateTime dtOut = DateTime.Parse(input, invC, DateTimeStyles.RoundtripKind);

         // Create a French (France) CultureInfo object.
         CultureInfo frFr = new CultureInfo("fr-FR");
         // Displays the date formatted for the "fr-FR" culture.
         Console.WriteLine("Date formatted for the {0} culture: {1}" ,
                           frFr.Name, dtOut.ToString("f", frFr));

         // Creates a German (Germany) CultureInfo object.
         CultureInfo deDe= new CultureInfo("de-De");
         // Displays the date formatted for the "de-DE" culture.
         Console.WriteLine("Date formatted for {0} culture: {1}" ,
                           deDe.Name, dtOut.ToString("f", deDe));
      }
      sr.Close();
   }
}
// The example displays the following output:
//    Stored data: Tue, 15 May 2012 16:34:16 GMT
//
//    Date formatted for the fr-FR culture: mardi 15 mai 2012 16:34
//    Date formatted for de-DE culture: Dienstag, 15. Mai 2012 16:34
Imports System.Globalization
Imports System.IO

Module Example
   Public Sub Main()
      ' Persist the date and time data.
      Dim sw As New StreamWriter(".\DateData.dat")
      
      ' Create a DateTime value.      
      Dim dtIn As DateTime = DateTime.Now
      ' Retrieve a CultureInfo object.
      Dim invC As CultureInfo = CultureInfo.InvariantCulture
      
      ' Convert the date to a string and write it to a file.
      sw.WriteLine(dtIn.ToString("r", invC))
      sw.Close()

      ' Restore the date and time data.
      Dim sr As New StreamReader(".\DateData.dat")
      Dim input As String = String.Empty
      Do While sr.Peek() >= 0 
         input = sr.ReadLine()
         Console.WriteLine("Stored data: {0}" , input)    
         Console.WriteLine()
         
         ' Parse the stored string.
         Dim dtOut As DateTime = DateTime.Parse(input, invC, DateTimeStyles.RoundtripKind)

         ' Create a French (France) CultureInfo object.
         Dim frFr As New CultureInfo("fr-FR")
         ' Displays the date formatted for the "fr-FR" culture.
         Console.WriteLine("Date formatted for the {0} culture: {1}" , 
                           frFr.Name, dtOut.ToString("f", frFr))

         ' Creates a German (Germany) CultureInfo object.
         Dim deDe As New CultureInfo("de-De")
         ' Displays the date formatted for the "de-DE" culture.
         Console.WriteLine("Date formatted for {0} culture: {1}" , 
                           deDe.Name, dtOut.ToString("f", deDe))
      Loop
      sr.Close()
   End Sub
End Module
' The example displays the following output:
'    Stored data: Tue, 15 May 2012 16:34:16 GMT
'    
'    Date formatted for the fr-FR culture: mardi 15 mai 2012 16:34
'    Date formatted for de-DE culture: Dienstag, 15. Mai 2012 16:34

Keputusan keamanan

Jika Anda membuat keputusan keamanan (seperti apakah akan mengizinkan akses ke sumber daya sistem) berdasarkan hasil perbandingan string atau perubahan kasus, Anda tidak boleh menggunakan budaya invarian. Sebagai gantinya, Anda harus melakukan perbandingan ordinal peka huruf besar/kecil atau tidak peka huruf besar/kecil dengan memanggil metode yang menyertakan StringComparison parameter dan menyediakan atau StringComparison.OrdinalStringComparison.OrdinalIgnoreCase sebagai argumen. Kode yang melakukan operasi string sensitif budaya dapat menyebabkan kerentanan keamanan jika budaya saat ini diubah atau jika budaya di komputer yang menjalankan kode berbeda dari budaya yang digunakan untuk menguji kode. Sebaliknya, perbandingan ordinal hanya bergantung pada nilai biner dari karakter yang dibandingkan.