Проблема с SortedDictionary в C# 11 с .NET 4.8/глобализацияC#

Место общения программистов C#
Ответить
Anonymous
 Проблема с SortedDictionary в C# 11 с .NET 4.8/глобализация

Сообщение Anonymous »

Веб-сайт использует текущую культуру пользователя для отображения данных. Проблема возникла, когда пользователь из Вьетнама получил доступ к данным. Может ли кто-нибудь объяснить, почему возникают эти проблемы?
Код для воспроизведения ошибки:
static void SortedDicProblem(Action Write)
{
Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US");

const string key = "KH";

SortedDictionary laCountries = new()
{
{ key, "Kambodscha " },
{ "KI", "Kiribati " },
{ "KM", "Komoren " },
};

foreach (CultureInfo loCult in System.Globalization.CultureInfo.GetCultures(CultureTypes.InstalledWin32Cultures))
{
Test(loCult.Name);
}

void Test(string vsCulture)
{
Thread.CurrentThread.CurrentCulture = new CultureInfo(vsCulture);

if (laCountries.TryGetValue(key, out string lsName))
{
Write($"{vsCulture}");
}
else
{
Write($"{vsCulture}, Key not found: {key}, {Thread.CurrentThread.CurrentCulture.EnglishName}");
}
}
}

Мы знаем, как это решить, но в чем причина этой ошибки?
Решение, позволяющее избежать проблемы: создайте экземпляр SortedDictionary с помощью StringComparer, например:
р>
new SortedDictionary(StringComparer.Ordinal)


Подробнее здесь: https://stackoverflow.com/questions/790 ... balization
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»