GetValuebtn()
метод никогда не вызывается, поэтому TryInheritance
всегда "".
Я думаю, вы хотите сделать следующее:
public virtual void firstButtonClicked()
{
GetValuebtn();
Debug.Log(TryInheritance);
}
Да - передают конструктора Словаря StringComparer.OrdinalIgnoreCase
(или другой игнорирующий случай компаратор, в зависимости от Ваших потребностей чувствительности культуры).
Jon
При помощи StringDictionary ключи преобразовываются в нижний регистр при создании времени.
http://simiansoftware.blogspot.com/2008/11/have-const-string-with-ui-description.html
Вы могли использовать ключевое слово 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);
}
Вы могли наследоваться 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.
Система. Наборы. Специализированный. StringDictionary () может помочь. Состояния MSDN:
"Ключ обрабатывается нечувствительным к регистру способом; это переводится в нижний регистр, прежде чем это будет использоваться со строковым словарем.
В версии 1.0 Платформы.NET этот класс использует чувствительные к культуре сравнения строк. Однако в версии 1.1 Платформы.NET и позже, этот класс использует CultureInfo. InvariantCulture при сравнении строк. Для получения дополнительной информации о том, как культура влияет на сравнения и сортировку, посмотрите Сравнение и Сортировку Данных для Определенной Культуры и Выполнения Нечувствительных к культуре Строковых операций."
Версия 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);
}