Tworzenie kultury i mapowanie wielkości liter w trybie niezmiennym globalizacji

Ta zmiana powodująca niezgodność wpływa na niezmienny tryb globalizacji na dwa sposoby:

  • Wcześniej platforma .NET zezwalała na tworzenie dowolnej kultury w trybie niezmiennym globalizacji, o ile nazwa kultury jest zgodna z BCP-47. Jednak niezmienne dane kultury były używane zamiast rzeczywistych danych kultury. Począwszy od platformy .NET 6, zgłaszany jest wyjątek, jeśli tworzysz dowolną kulturę inną niż niezmienna kultura w trybie niezmiennym globalizacji.
  • Wcześniej niezmienny tryb globalizacji obsługiwał tylko mapowanie wielkości liter dla znaków ASCII. Począwszy od platformy .NET 6, niezmienny tryb globalizacji zapewnia pełną obsługę mapowania liter dla wszystkich znaków zdefiniowanych w formacie Unicode. Mapowanie wielkości liter jest używane w operacjach, takich jak porównania ciągów, wyszukiwanie ciągów i ciągi wielkości liter lub dolne.

Niezmienny tryb globalizacji jest używany w przypadku aplikacji, które nie wymagają żadnej obsługi globalizacji. Oznacza to, że aplikacja działa bez dostępu do danych i zachowań specyficznych dla kultury. Tryb niezmienny globalizacji jest domyślnie włączony w niektórych kontenerach platformy Docker, na przykład w kontenerach Alpine.

Stare zachowanie

W poprzednich wersjach platformy .NET, gdy jest włączony tryb niezmienny globalizacji:

  • Jeśli aplikacja tworzy kulturę, która nie jest niezmienną kulturą, operacja powiedzie się, ale zwracana kultura zawsze używa niezmiennych danych kultury zamiast rzeczywistych danych kultury.

  • Mapowanie wielkości liter zostało wykonane tylko dla znaków ASCII. Na przykład:

    if ("Á".Equals("á", StringComparison.CurrentCultureIgnoreCase)) // Evaluates to false.
    

Nowe zachowanie

Począwszy od platformy .NET 6, gdy jest włączony tryb niezmienny globalizacji:

  • Jeśli aplikacja próbuje utworzyć kulturę, która nie jest niezmienną kulturą, zgłaszany CultureNotFoundException jest wyjątek.

  • Mapowanie wielkości liter jest wykonywane dla wszystkich znaków zdefiniowanych w formacie Unicode. Na przykład:

    if ("Á".Equals("á", StringComparison.CurrentCultureIgnoreCase)) // Evaluates to true.
    

Wprowadzona wersja

.NET 6

Przyczyna wprowadzenia zmiany

Zmiana tworzenia kultury została wprowadzona w celu łatwiejszego diagnozowania problemów związanych z kulturą. Niektórzy użytkownicy nie wiedzą, że ich aplikacje działają w środowisku, w którym jest włączony tryb niezmienny globalizacji. Mogą one napotkać nieoczekiwane zachowanie i nie sprawiają, że skojarzenie z trybem niezmiennym globalizacji, więc trudno zdiagnozować problem.

Pełna obsługa mapowania przypadków została wprowadzona w celu zapewnienia lepszej użyteczności i doświadczenia w trybie niezmiennym globalizacji.

W większości przypadków nie jest wymagana żadna akcja. Jeśli jednak chcesz, aby poprzednie zachowanie tworzenia kultury było pożądane, możesz ustawić opcję konfiguracji środowiska uruchomieniowego, aby umożliwić tworzenie dowolnej kultury w trybie niezmiennym globalizacji. Aby uzyskać więcej informacji, zobacz Wstępnie zdefiniowane kultury.

Dotyczy interfejsów API

Zobacz też