为什么我的词典<;字符串,字符串>;默认情况下不区分大小写
本文关键字:字符串 情况下 默认 不区 大小写 gt lt 我的 为什么 | 更新日期: 2023-09-27 18:01:11
据我所知,Dictionary中的密钥检查默认情况下是区分大小写的,但至少在我的软件中,情况并非如此。为了对TryGetValue和Contains进行区分大小写的密钥检查,我必须按照以下方式构建字典:
Dictionary<string, string> a = new Dictionary<string,string>(StringComparer.Ordinal);
那我错了吗?默认情况下字典不区分大小写吗?
否,默认情况下Dictionary<string, string>
不区分大小写。
这个小应用程序可以很容易地显示这一点:
using System;
using System.Collections.Generic;
public class MainClass
{
public static void Main(string[] args)
{
var newDict = new Dictionary<string, string>();
newDict.Add("a", "x");
Console.WriteLine(newDict.ContainsKey("a"));
Console.WriteLine(newDict.ContainsKey("A"));
newDict.Add("A", "y");
Console.WriteLine(newDict.ContainsKey("a"));
Console.WriteLine(newDict.ContainsKey("A"));
Console.WriteLine(newDict.Count);
}
}
该输出:
True
False
True
True
2
说明:
- 首先,添加密钥
a
- 3用于检查是否找到密钥CCD_ 4和CCD_。只有前者才是
- 然后,使用
Add
来添加密钥A
。它没有抱怨,也就是说,它不认为密钥已经存在 - 最后,
Count
用于检查字典条目的总数,并正确输出2
,即A
和a
IDictionary<TKey, TValue>()
将使用在TKey
实例上提供的bool Equals(object obj)
和int GetHashCode()
的任何实现。
对于string
,该实现在功能上等同于EqualityComparer<string>.Default
所提供的实现,CCD_17是等同于StringComparer.Ordinal
的功能。
正如您在问题中所述,您可以使用字典构造函数的替代重载来提供将用作替代的IEqualityComparer<string>
实现。