CultureInfo.InvariantCulture Vlastnost

Definice

CultureInfo Získá objekt, který je nezávislý na jazykové verzi (invariantní).

public:
 static property System::Globalization::CultureInfo ^ InvariantCulture { System::Globalization::CultureInfo ^ get(); };
public static System.Globalization.CultureInfo InvariantCulture { get; }
static member InvariantCulture : System.Globalization.CultureInfo
Public Shared ReadOnly Property InvariantCulture As CultureInfo

Hodnota vlastnosti

CultureInfo

Objekt, který je nezávislý na jazykové verzi (invariantní).

Poznámky

Invariantní jazyková verze je necitlivá na jazykovou verzi; je přidružený k anglickému jazyku, ale ne k žádné zemi nebo oblasti. Invariantní jazykovou verzi zadáte podle názvu pomocí prázdného řetězce ("") ve volání CultureInfo metody vytvoření instance. CultureInfo.InvariantCulture také načte instanci invariantní jazykové verze. Dá se použít v téměř libovolné metodě v System.Globalization oboru názvů, která vyžaduje jazykovou verzi. Objekty vrácené vlastnostmi, jako CompareInfoje , DateTimeFormata NumberFormat také odrážejí konvence porovnání řetězců a formátování invariantní jazykové verze.

Na rozdíl od dat citlivých na jazykovou verzi, která se mohou měnit přizpůsobením uživatele nebo aktualizacemi rozhraní .NET Framework nebo operačního systému, jsou data invariantní jazykové verze stabilní v průběhu času a mezi nainstalovanými jazykovými verzemi a uživatelé je nemohou přizpůsobit. Díky tomu je invariantní jazyková verze obzvláště užitečná pro operace, které vyžadují výsledky nezávislé na jazykové verzi, jako jsou operace formátování a parsování, které zachovají formátovaná data, nebo operace řazení a řazení, které vyžadují, aby se data zobrazovala v pevném pořadí bez ohledu na jazykovou verzi.

Řetězcové operace

Invariantní jazykovou verzi můžete použít pro operace s řetězci citlivými na jazykovou verzi, které nejsou ovlivněny konvencemi aktuální jazykové verze a jsou konzistentní napříč jazykovými verzemi. Můžete například chtít, aby se seřazená data zobrazovala v pevně daném pořadí, nebo můžete u řetězců použít standardní sadu konvencí pro velká písmena bez ohledu na aktuální jazykovou verzi. Chcete-li to provést, předáte InvariantCulture objekt metodě, která má CultureInfo parametr, například Compare(String, String, Boolean, CultureInfo) a ToUpper(CultureInfo).

Uchování dat

Vlastnost InvariantCulture lze použít k uchování dat ve formátu nezávislém na jazykové verzi. Poskytuje známý formát, který se nemění a který lze použít k serializaci a deserializaci dat napříč jazykovými verzemi. Po deserializaci dat je možné je odpovídajícím způsobem naformátovat na základě kulturních konvencí aktuálního uživatele.

Pokud se například rozhodnete zachovat data data data a času v řetězcové podobě, můžete předat InvariantCulture objekt DateTime.ToString(String, IFormatProvider) do metody nebo DateTimeOffset.ToString(IFormatProvider) a vytvořit řetězec a InvariantCulture předat objekt DateTime.Parse(String, IFormatProvider) metodě nebo DateTimeOffset.Parse(String, IFormatProvider, DateTimeStyles) a převést řetězec zpět na hodnotu data a času. Tato technika zajišťuje, aby se při čtení nebo zápisu dat uživateli z různých jazykových verzí nezměnily základní hodnoty data a času.

Následující příklad používá invariantní jazykovou verzi k zachování DateTime hodnoty jako řetězce. Potom analyzuje řetězec a zobrazí jeho hodnotu pomocí konvencí formátování jazykových verzí francouzštiny (Francie) a němčiny (Německo).

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

Rozhodování o zabezpečení

Pokud provádíte rozhodnutí o zabezpečení (například jestli chcete povolit přístup k systémovému prostředku) na základě výsledku porovnání řetězců nebo změny případu, neměli byste používat invariantní jazykovou verzi. Místo toho byste měli provést porovnání řadových řad rozlišujících malá a malá a malá písmena voláním metody, která obsahuje StringComparison parametr a zadáním buď StringComparison.Ordinal nebo StringComparison.OrdinalIgnoreCase jako argument. Kód, který provádí operace řetězců citlivých na jazykovou verzi, může způsobit ohrožení zabezpečení, pokud se změní aktuální jazyková verze nebo pokud se jazyková verze v počítači, na kterém je spuštěný kód, liší od jazykové verze, která se používá k testování kódu. Naproti tomu porovnání řad závisí výhradně na binární hodnotě porovnávaných znaků.

Platí pro

Viz také