Как исправить сравнение строк на разных машинах - PullRequest
0 голосов
/ 30 января 2020
  1. У меня есть локальный компьютер с локалью: en-US
  2. У меня есть сборочный компьютер с локалью: en-US-POSIX
  3. У меня есть prod (AWS do tnet lambda ) машина с локалью: en_US.UTF-8

У меня есть этот кусок кода, чтобы получить правильный регистр для поля базы данных:

public string FixFieldCaseName(string fieldName)
{
    var mappings = new Dictionary<string, string>(StringComparer.CurrentCultureIgnoreCase);
    mappings.Add("test", "Test");

    if (mappings.TryGetValue(fieldName, out var fixedFieldName) && fixedFieldName != fieldName)
    {
        _logger.Debug("stuff");
        return fixedFieldName;
    }
    return fieldName;
}

Это работает локально и на лямбда, но не на сборке машины. Он возвращает мне исходную строку.

Local и Lambda: input ("TeSt") -> output ("Test")

Build machine: input ("TeSt") -> output ( "TeSt")

Он не работает в Ubuntu из-за локали (en-US-POSIX): https://github.com/dotnet/corefx/issues/17052

Имена полей используются для выполнения запросов в базе данных.

Как правильно это исправить?

  1. Я не уверен, использовать ли OrdinalIgnoreCase или InvariantCultureIgnoreCase, даже ПОСЛЕ того, как я перечитал лучшие практики на странице MSFT .

ИЛИ

Должен ли я везде указывать культуру в моем коде?

System.Globalization.CultureInfo.CurrentCulture = new System.Globalization.CultureInfo("en-US");

Спасибо за любую помощь.

...