C# 如何为var-input-C创建不区分大小写的字典# var fruitDictionary=新字典(StringComparer.invariantCultureInogoreCase){{{“苹果”、“水果”}、{“橙色”、“水果”}、{“菠菜”、“绿色”}; TextRange TextRange=新的TextRange(richTextBox1.Document.ContentStart,richTextBox1.Document.ContentEnd); 字符串数据=textRange.Text; var输出=新的StringBuilder(数据); foreach(FroothDictionary中的var kvp) 输出.替换(kvp.Key,kvp.Value); var result=output.ToString(); richTextBox2.AppendText(结果);

C# 如何为var-input-C创建不区分大小写的字典# var fruitDictionary=新字典(StringComparer.invariantCultureInogoreCase){{{“苹果”、“水果”}、{“橙色”、“水果”}、{“菠菜”、“绿色”}; TextRange TextRange=新的TextRange(richTextBox1.Document.ContentStart,richTextBox1.Document.ContentEnd); 字符串数据=textRange.Text; var输出=新的StringBuilder(数据); foreach(FroothDictionary中的var kvp) 输出.替换(kvp.Key,kvp.Value); var result=output.ToString(); richTextBox2.AppendText(结果);,c#,dictionary,case,C#,Dictionary,Case,它工作正常,但如果输入的格式不正确,它将无法工作。例如,在Apple上,输出为Fruit,但在Apple上,通过将字典的比较器设置为StringComparer,它仍然显示Apple。InvariantCultureInogoreCase,键查找变成了区域性和大小写不变--即var a=fruitDictionary[“Apple”]和var b=fruitDictionary[“ApPlE”]将产生相同的结果。也就是说,您在与之无关的StringBuilder实例上执行替换操作。StringB

它工作正常,但如果输入的格式不正确,它将无法工作。例如,在Apple上,输出为Fruit,但在Apple上,通过将字典的比较器设置为StringComparer,它仍然显示Apple。InvariantCultureInogoreCase,键查找变成了区域性和大小写不变--即
var a=fruitDictionary[“Apple”]
var b=fruitDictionary[“ApPlE”]
将产生相同的结果。也就是说,您在与之无关的
StringBuilder
实例上执行替换操作。
StringBuilder.Replace
String.Replace
都没有可以配置字符串比较选项的重载,因此必须创建扩展方法

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);
公共静态字符串替换(此字符串str、字符串oldValue、字符串newValue、,
StringComparison=StringComparison.Ordinal)
{
var指数=str.IndexOf(旧值,比较);
而(索引>=0)
{
str=str.Remove(索引,oldValue.Length);
str=str.Insert(索引,newValue);
索引=str.IndexOf(旧值,比较);
}
返回str;
}
var FROUTHDICTIONARY=新字典(StringComparer.InvariantCultureInogoreCase){{{“苹果”、“水果”}、{“橙色”、“水果”}、{“菠菜”、“绿色”};
TextRange TextRange=新的TextRange(richTextBox1.Document.ContentStart,richTextBox1.Document.ContentEnd);
字符串数据=textRange.Text;
foreach(FroothDictionary中的var kvp)
data=data.Replace(kvp.Key、kvp.Value、StringComparison.InvariantCultureIgnoreCase)
richTextBox2.AppendText(数据);
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);