Partilhar via


Usando a propriedade InvariantCulture

The InvariantCulture propriedade representa nem um neutro nem uma cultura específica. Ele representa um terceiro tipo de cultura que é a diferenciação de cultura.Ele está associado com o linguagem inglês, mas não com um Country ou região.Seus aplicativos podem usar essa propriedade com praticamente qualquer método no System.Globalization espaço para nome que requer uma cultura. No entanto, um aplicativo deve usar a cultura invariável somente para sistema autônomo processos que exigem resultados independente de cultura, sistema autônomo, por exemplo, formatação e análise de dados que são mantidos em um arquivo.Em outros casos, ela produz resultados que podem estar incorretos linguistically ou culturalmente inadequado.

Considerações sobre segurança

Se uma decisão de segurança será feita com base no resultado de uma comparação de seqüências de caracteres ou alterar maiúsculas, seu aplicativo deve usar uma comparação ordinal ignora caso em vez de usar InvariantCulture. sistema autônomo implementações padrão de métodos, sistema autônomo Compare() e ToUpper Use o CurrentCulture propriedade. Código que executa operações de cadeias de caracteres sensíveis à cultura pode causar vulnerabilidades de segurança se CurrentCulture é alterado ou se a cultura no computador que executa o código difere a cultura usada para testar o código. O comportamento esperado ao escrever uma seqüência de caracteres de operação difere o comportamento real do seu código no computador em execução.Por outro lado, uma comparação ordinal depende exclusivamente do binário valor em comparação com os caracteres.

Seqüência de operações

Se o seu aplicativo precisa realizar uma operação de seqüência de caracteres sensíveis à cultura não é afetada pelo valor de CurrentCulture, ele deve usar um método que aceita um CultureInfo parâmetro. O aplicativo deve especificar o valor do InvariantCulture propriedade para este parâmetro. O aplicativo deve usar a propriedade com métodos sistema autônomo, por exemplo, Compare() e ToUpper para eliminar variações culturais e garantir resultados consistentes. Para obter mais informações sobre como usar o InvariantCulture propriedade executar operações de seqüência de diferenciação de cultura, consulte Diferenciação de cultura operações de string.

Dados persistentes

The InvariantCulture propriedade é útil para o armazenamento de dados que não serão exibidos diretamente aos usuários. Armazenamento de dados em um formato independente de cultura garante um formato conhecido não alterar.Quando os usuários de diferentes culturas acessam os dados, podem ser formatado apropriadamente com base no usuário específico.Por exemplo, se o aplicativo armazena DateTime tipos em um arquivo de texto formatados para a cultura invariável, o aplicativo deve usar o InvariantCulture propriedade ao chamar ToString para armazenar as cadeias de caracteres e o Parse método para recuperar as seqüências de caracteres. Essa técnica garante que os valores subjacentes do DateTime tipos não são alterados quando os dados é lido ou gravados por usuários de diferentes culturas.

O exemplo de código a seguir demonstra como inicializar um CultureInfoobjeto com a cultura invariável usando uma seqüência de caracteres vazia ("") ou InvariantCulture.

' The following lines are equivalent.
CultureInfo Invc = New CultureInfo("")
CultureInfo Invc = CultureInfo.InvariantCulture
// The following lines are equivalent.
CultureInfo Invc = New CultureInfo("");
CultureInfo Invc = CultureInfo.InvariantCulture;

O exemplo de código a seguir ilustra a escrever um DateTime objeto para um arquivo sistema autônomo uma seqüência de caracteres formatada para a cultura invariável usando o ToString método. A seqüência de caracteres é, em seguida, ler o arquivo no formato de cultura invariável e analisada para um DateTime objeto usando o Parse método. The DateTimeobjeto é, em seguida, formatado e exibido para as culturas "fr-FR" e "ja-JP".

Imports System
Imports System.IO
Imports System.Globalization
Imports Microsoft.VisualBasic

Public Class TextToFile
   Private const FILE_NAME As String = "MyDateFile.txt"   
   
   Public Shared Sub Main()
      If File.Exists(FILE_NAME) Then
         Console.WriteLine("{0} already exists!", FILE_NAME)
         Return
      End If

      Dim sw As StreamWriter = File.CreateText(FILE_NAME)
      
      'Creates a DateTime.
      Dim dtIn As DateTime = DateTime.Now
      Dim InvC As CultureInfo = CultureInfo.InvariantCulture
      ' Writes the string to the file formatted for InvariantCulture.
      sw.WriteLine(dtIn.ToString("d", InvC))
      sw.Close()
      
      If Not File.Exists(FILE_NAME) Then
         Console.WriteLine("{0} does not exist!", FILE_NAME)
         Return
      End If
      
      Dim sr As StreamReader = File.OpenText(FILE_NAME)
      Dim filedate As String
      filedate = sr.Readline()
      While Not filedate Is Nothing
         Console.WriteLine(ControlChars.Newline + "The date stored in _
            the file formatted for the invariant culture is:" + _
            ControlChars.Newline + " {0}", filedate )
         
         ' Creates a new DateTime and parses the 
         ' string stored in the file.
         Dim dtout as DateTime = DateTime.Parse(filedate, InvC)
         
         ' Creates a CultureInfo set to "fr-FR".
         Dim frc As New CultureInfo("fr-FR")
         ' Displays the date formatted for the "fr-FR" culture.
         Console.WriteLine(ControlChars.Newline + "The date read from _
            the file and formatted for the culture ""fr-FR"" is:" + _
            ControlChars.Newline + " {0}", dtout.ToString("d", frc))
         
         ' Creates a CultureInfo set to "ja-JP".
         Dim jpn As New CultureInfo("ja-JP")
         ' Displays the date formatted for the "ja-JP" culture.
         Console.WriteLine(ControlChars.Newline + "The date read from _
            the file and formatted for the culture ""ja-JP"" is:" + _
            ControlChars.Newline + " {0}", dtout.ToString("d", jpn))
        
        filedate = sr.Readline()
      End While
      
      Console.WriteLine(ControlChars.Newline + "The end of the stream _
         has been reached.")
      sr.Close()
   End Sub
End Class
using System;
using System.IO;
using System.Globalization;

public class TextToFile 
{
   private const string FILE_NAME = "MyDateFile.txt";
   public static void Main(String[] args) 
   {
      if (File.Exists(FILE_NAME)) 
      {
         Console.WriteLine("{0} already exists!", FILE_NAME);
         return;
      }
      StreamWriter sw = File.CreateText(FILE_NAME);
      
      // Creates a DateTime.      
      DateTime dtIn = DateTime.Now;
      // Creates a CultureInfo set to InvariantCulture.
      CultureInfo InvC = new CultureInfo("");
      // Converts dt to a string formatted for InvariantCulture,
      // and writes it to a file.
      sw.WriteLine (dtIn.ToString("d",InvC));
      sw.Close();

      if (!File.Exists(FILE_NAME)) 
      {
         Console.WriteLine("{0} does not exist!", FILE_NAME);
         return;
      }
      StreamReader sr = File.OpenText(FILE_NAME);
      String date;
      while ((date=sr.ReadLine())!=null) 
      {
         Console.WriteLine("\nThe date stored in the file formatted for 
               the invariant culture is:\n{0}" , date);    

         // Parses the string stored in the file,
         // and stores it in a DateTime.
         DateTime dtout = DateTime.Parse(date, InvC);

         // Creates a CultureInfo set to "fr-FR".
         CultureInfo frc = new CultureInfo("fr-FR");
         // Displays the date formatted for the "fr-FR" culture.
         Console.WriteLine("\nThe date read from the file and formatted 
               for the culture \"fr-FR\" is:\n{0}" , dtout.ToString("d", 
               frc));

         // Creates a CultureInfo set to "ja-JP".
         CultureInfo jpn= new CultureInfo("ja-JP");
         // Displays the date formatted for the "ja-JP" culture.
         Console.WriteLine("\nThe date read from the file and formatted 
               for the culture \"ja-JP\" is:\n{0}" , dtout.ToString("d", 
               jpn));
      }
      Console.WriteLine ("\nThe end of the stream has been reached.");
      sr.Close();
   }
}

Este código produz a seguinte saída:

The date stored in the file formatted for the invariant culture is:
07/24/2001

The date read from the file and formatted for the culture "fr-FR" is:
24/07/2001

The date read from the file and formatted for the culture "ja-JP" is:
2001/07/24

The end of the stream has been reached.

Consulte também

Conceitos

Usando a classe CultureInfo