Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
In dit artikel vindt u aanvullende opmerkingen in de referentiedocumentatie voor deze API.
De invariante cultuur is cultuurongevoelig; het is verbonden aan de Engelse taal, maar niet aan een land of regio. U geeft de invariante cultuur op naam op met behulp van een lege tekenreeks ("") in de aanroep naar een CultureInfo instantiëringsmethode. Deze eigenschap, CultureInfo.InvariantCulture, haalt ook een instantie van de invariante cultuur op. Het kan worden gebruikt in vrijwel elke methode in de System.Globalization naamruimte waarvoor een cultuur is vereist. De objecten die worden geretourneerd door eigenschappen zoals CompareInfo, DateTimeFormaten NumberFormat weerspiegelen ook de tekenreeksvergelijking en opmaakconventies van de invariante cultuur.
In tegenstelling tot cultuurgevoelige gegevens, die onderhevig zijn aan wijzigingen door gebruikersaanpassing of updates van .NET Framework of het besturingssysteem, zijn invariante cultuurgegevens in de loop van de tijd stabiel en in verschillende geïnstalleerde culturen en kunnen ze niet worden aangepast door gebruikers. Dit maakt de invariante cultuur bijzonder nuttig voor bewerkingen waarvoor cultuuronafhankelijke resultaten nodig zijn, zoals opmaak- en parseringsbewerkingen die opgemaakte gegevens behouden, of bewerkingen voor sorteren en ordenen waarvoor gegevens in een vaste volgorde moeten worden weergegeven, ongeacht cultuur.
Stringbewerkingen
U kunt de invariante cultuur gebruiken voor cultuurgevoelige tekenreeksbewerkingen die niet worden beïnvloed door de conventies van de huidige cultuur en die consistent zijn over verschillende culturen heen. U kunt bijvoorbeeld gegevens in een vaste volgorde laten zien of een standaardset hoofdletterconventies toepassen op tekenreeksen, ongeacht de cultuurinstelling. Hiervoor geeft u het InvariantCulture object door aan een methode met een CultureInfo parameter, zoals Compare(String, String, Boolean, CultureInfo) en ToUpper(CultureInfo).
Persistente gegevens
De InvariantCulture eigenschap kan worden gebruikt om gegevens in een cultuuronafhankelijke indeling te behouden. Dit biedt een bekende indeling die niet verandert en die kan worden gebruikt voor het serialiseren en deserialiseren van gegevens in culturen. Nadat de gegevens gedeserialiseerd zijn, kunnen deze op de juiste wijze worden opgemaakt op basis van de culturele conventies van de huidige gebruiker.
Als u bijvoorbeeld datum- en tijdgegevens in tekenreeksformulier wilt behouden, kunt u het InvariantCulture object doorgeven aan de DateTime.ToString(String, IFormatProvider) of DateTimeOffset.ToString(IFormatProvider) methode om de tekenreeks te maken en u kunt het InvariantCulture object doorgeven aan de DateTime.Parse(String, IFormatProvider) of DateTimeOffset.Parse(String, IFormatProvider, DateTimeStyles) methode om de tekenreeks terug te zetten naar een datum- en tijdwaarde. Deze techniek zorgt ervoor dat de onderliggende datum- en tijdwaarden niet veranderen wanneer de gegevens worden gelezen of geschreven door gebruikers uit verschillende culturen.
In het volgende voorbeeld wordt de invariante cultuur gebruikt om een DateTime waarde als een tekenreeks te behouden. Vervolgens wordt de tekenreeks geparseerd en wordt de waarde ervan weergegeven met behulp van de opmaakconventies van de Franse (Frankrijk) en Duitse (Duitsland) culturen.
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: {input}\n");
// 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 {frFr.Name} culture: {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 {deDe.Name} culture: {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
Beveiligingsbeslissingen
Als u een beveiligingsbeslissing neemt (bijvoorbeeld of u toegang tot een systeemresource wilt toestaan) op basis van het resultaat van een tekenreeksvergelijking of een casewijziging, moet u de invariante cultuur niet gebruiken. In plaats daarvan moet u een hoofdlettergevoelige of niet-hoofdlettergevoelige ordinale vergelijking uitvoeren door een methode aan te roepen die een StringComparison parameter bevat en StringComparison.Ordinal of StringComparison.OrdinalIgnoreCase als argument op te geven. Code die cultuurgevoelige tekenreeksbewerkingen uitvoert, kan beveiligingsproblemen veroorzaken als de huidige cultuur wordt gewijzigd of als de cultuur op de computer waarop de code wordt uitgevoerd verschilt van de cultuur die wordt gebruikt om de code te testen. Een rangtelvergelijking is daarentegen alleen afhankelijk van de binaire waarde van de vergeleken tekens.