Export (0) Print
Expand All

CultureInfo.InvariantCulture Property

Gets the CultureInfo object that is culture-independent (invariant).

Namespace:  System.Globalization
Assembly:  mscorlib (in mscorlib.dll)

Public Shared ReadOnly Property InvariantCulture As CultureInfo

Property Value

Type: System.Globalization.CultureInfo
The object that is culture-independent (invariant).

The invariant culture is culture-insensitive; it is associated with the English language but not with any country/region. You specify the invariant culture by name by using an empty string ("") in the call to a CultureInfo instantiation method. CultureInfo.InvariantCulture also retrieves an instance of the invariant culture. It can be used in almost any method in the System.Globalization namespace that requires a culture. The objects returned by properties such as CompareInfo, DateTimeFormat, and NumberFormat also reflect the string comparison and formatting conventions of the invariant culture.

Unlike culture-sensitive data, which is subject to change by user customization or by updates to the .NET Framework or the operating system, invariant culture data is stable over time and across installed cultures and cannot be customized by users. This makes the invariant culture particularly useful for operations that require culture-independent results, such as formatting and parsing operations that persist formatted data, or sorting and ordering operations that require that data be displayed in a fixed order regardless of culture.

String Operations

You can use the invariant culture for culture-sensitive string operations that are not affected by the conventions of the current thread culture and that are consistent across cultures. For example, you may want sorted data to appear in a fixed order or apply a standard set of casing conventions to strings regardless of the current thread culture. To do this, you pass the InvariantCulture object to a method that has a CultureInfo parameter, such as Compare(String, String, Boolean, CultureInfo) and ToUpper(CultureInfo).

Persisting Data

The InvariantCulture property can be used to persist data in a culture-independent format. This provides a known format that does not change and that can be used to serialize and deserialize data across cultures. After the data is deserialized, it can be formatted appropriately based on the cultural conventions of the current user.

For example, if you choose to persist date and time data in string form, you can pass the InvariantCulture object to the DateTime.ToString(String, IFormatProvider) or DateTimeOffset.ToString(IFormatProvider) method to create the string, and you can pass the InvariantCulture object to the DateTime.Parse(String, IFormatProvider) or DateTimeOffset.Parse(String, IFormatProvider, DateTimeStyles) method to convert the string back to a date and time value. This technique ensures that the underlying date and time values do not change when the data is read or written by users from different cultures.

The following example uses the invariant culture to persist a DateTime value as a string. It then parses the string and displays its value by using the formatting conventions of the French (France) and German (Germany) cultures.

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))

      ' 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)    

         ' 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))
   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

Security Decisions

If you are making a security decision (such as whether to allow access to a system resource) based on the result of a string comparison or a case change, you should not use the invariant culture. Instead, you should perform a case-sensitive or case-insensitive ordinal comparison by calling a method that includes a StringComparison parameter and supplying either StringComparison.Ordinal or StringComparison.OrdinalIgnoreCase as an argument. Code that performs culture-sensitive string operations can cause security vulnerabilities if the current culture is changed or if the culture on the computer that is running the code differs from the culture that is used to test the code. In contrast, an ordinal comparison depends solely on the binary value of the compared characters.

.NET Framework

Supported in: 4.5.2, 4.5.1, 4.5, 4, 3.5, 3.0, 2.0, 1.1, 1.0

.NET Framework Client Profile

Supported in: 4, 3.5 SP1

Portable Class Library

Supported in: Portable Class Library

.NET for Windows Store apps

Supported in: Windows 8

.NET for Windows Phone apps

Supported in: Windows Phone 8.1, Windows Phone 8, Silverlight 8.1

Windows Phone 8.1, Windows Phone 8, Windows 8.1, Windows Server 2012 R2, Windows 8, Windows Server 2012, Windows 7, Windows Vista SP2, Windows Server 2008 (Server Core Role not supported), Windows Server 2008 R2 (Server Core Role supported with SP1 or later; Itanium not supported)

The .NET Framework does not support all versions of every platform. For a list of the supported versions, see .NET Framework System Requirements.

© 2014 Microsoft