如何为var输入创建不区分大小写的字典 - C#

Khw*_*smi 1 c# dictionary case

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);
Run Code Online (Sandbox Code Playgroud)

它正常工作,但如果输入不是格式,它将无法正常工作.例如在苹果公司,产量是水果,但在苹果上它仍然说苹果

Tyr*_*rrz 6

按字典的比较器设置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);
Run Code Online (Sandbox Code Playgroud)