как сделать регистр без учета регистра для ввода var - C # - PullRequest
0 голосов
/ 30 июня 2018
var fruitDictionary = new Dictionary<string, string>(StringComparer.InvariantCultureIgnoreCase) { { "Apple" , "Fruit" }, { "Orange", "Fruit" }, { "Spinach", "Greens" } };

        TextRange textRange = new TextRange(richTextBox1.Document.ContentStart, richTextBox1.Document.ContentEnd);
        string data = textRange.Text;
        var output = new StringBuilder(data);

        foreach (var kvp in fruitDictionary)
            output.Replace(kvp.Key, kvp.Value);

        var result = output.ToString();
        richTextBox2.AppendText(result);

Работает нормально, но если вход не в формате, он не будет работать. Например, для Apple выводится «Fruit», а для «Apple» он по-прежнему гласит «яблоко

».

1 Ответ

0 голосов
/ 30 июня 2018

Если для компаратора словаря установить значение StringComparer.InvariantCultureIgnoreCase, поиск ключа станет культурным и не будет зависеть от регистра - то есть var a = fruitDictionary["apple"]; и var b = fruitDictionary["ApPlE"] приведут к тем же результатам. Тем не менее, вы выполняете операцию замены на экземпляре StringBuilder, который не связан с этим. И StringBuilder.Replace, и String.Replace не имеют перегрузок, которые позволяют настраивать параметры сравнения строк, поэтому вам придется создать метод расширения.

public static string Replace(this string str, string oldValue, string newValue,
            StringComparison comparison = StringComparison.Ordinal)
{
    var index = str.IndexOf(oldValue, comparison);
    while (index >= 0)
    {
        str = str.Remove(index, oldValue.Length);
        str = str.Insert(index, newValue);
        index = str.IndexOf(oldValue, comparison);
    }

    return str;
}

var fruitDictionary = new Dictionary<string, string>(StringComparer.InvariantCultureIgnoreCase) { { "Apple" , "Fruit" }, { "Orange", "Fruit" }, { "Spinach", "Greens" } };

TextRange textRange = new TextRange(richTextBox1.Document.ContentStart, richTextBox1.Document.ContentEnd);
string data = textRange.Text;

foreach (var kvp in fruitDictionary)
    data = data.Replace(kvp.Key, kvp.Value, StringComparison.InvariantCultureIgnoreCase)

richTextBox2.AppendText(data);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...