Преобразуйте IDictionary <строка, строка> ключи к нижнему регистру (C#)

GetValuebtn() метод никогда не вызывается, поэтому TryInheritance всегда "".

Я думаю, вы хотите сделать следующее:

public virtual void firstButtonClicked()
{
    GetValuebtn();
    Debug.Log(TryInheritance);
}
5
задан Tigraine 2 October 2008 в 10:31
поделиться

6 ответов

Да - передают конструктора Словаря StringComparer.OrdinalIgnoreCase (или другой игнорирующий случай компаратор, в зависимости от Ваших потребностей чувствительности культуры).

Jon

30
ответ дан 18 December 2019 в 05:31
поделиться

При помощи StringDictionary ключи преобразовываются в нижний регистр при создании времени.

http://simiansoftware.blogspot.com/2008/11/have-const-string-with-ui-description.html

2
ответ дан 18 December 2019 в 05:31
поделиться

Вы могли использовать ключевое слово var для удаления некоторой помехи. Технически источник остается тем же. Также я просто передал бы и возвратил бы Словарь <строка, строка>, потому что Вы ничего не делаете с этим параметр ILanguage и делаете метод более допускающим повторное использование:

private static IDictionary<string, string> ConvertKeysToLowerCase(
    IDictionary<string, string> dictionaries)
{
    var convertedDictionatry = new Dictionary<string, string>();
    foreach(string key in dictionaries.Keys)
    {
        convertedDictionatry.Add(key.ToLower(), dictionaries[key]);
    }
    return convertedDictionatry;
}

... и назовите его как так:

// myLanguageDictionaries is of type IDictionary<ILanguage, IDictionary<string, string>>
foreach (var dictionary in myLanguageDictionaries.Keys)
{
  myLanguageDictionaries[dictionary].Value = 
      ConvertKeysToLowerCase(myLanguageDictionaries[dictionary].Value);
}
1
ответ дан 18 December 2019 в 05:31
поделиться

Вы могли наследоваться IDictionary сами и просто упорядочить вызовы к внутреннему экземпляру Словаря.

Add(string key, string value) { dictionary.Add(key.ToLowerInvariant(), value) ; }
public string this[string key]
{
    get { return dictionary[key.ToLowerInvariant()]; }
    set { dictionary[key.ToLowerInvariant()] = value; }
}
// And so forth.
1
ответ дан 18 December 2019 в 05:31
поделиться

Система. Наборы. Специализированный. StringDictionary () может помочь. Состояния MSDN:

"Ключ обрабатывается нечувствительным к регистру способом; это переводится в нижний регистр, прежде чем это будет использоваться со строковым словарем.

В версии 1.0 Платформы.NET этот класс использует чувствительные к культуре сравнения строк. Однако в версии 1.1 Платформы.NET и позже, этот класс использует CultureInfo. InvariantCulture при сравнении строк. Для получения дополнительной информации о том, как культура влияет на сравнения и сортировку, посмотрите Сравнение и Сортировку Данных для Определенной Культуры и Выполнения Нечувствительных к культуре Строковых операций."

1
ответ дан 18 December 2019 в 05:31
поделиться

Версия LINQ с помощью IEnumerable<T> дополнительные методы:


        private static IDictionary<ILanguage, IDictionary<string, string>> ConvertKeysToLowerCase(
            IDictionary<ILanguage, IDictionary<string, string>> dictionaries)
        {
            return dictionaries.ToDictionary(
                x => x.Key, v => CloneWithComparer(v.Value, StringComparer.OrdinalIgnoreCase));
        }

        static IDictionary<K, V> CloneWithComparer<K,V>(IDictionary<K, V> original, IEqualityComparer<K> comparer)
        {
            return original.ToDictionary(x => x.Key, x => x.Value, comparer);
        }
-1
ответ дан 18 December 2019 в 05:31
поделиться
Другие вопросы по тегам:

Похожие вопросы: