C# 为什么我的字典是<;字符串,字符串>;默认情况下不区分大小写?
据我所知,字典中的键检查默认情况下是区分大小写的,但至少在我的软件中,情况并非如此。为了对TryGetValue和Contains进行区分大小写的密钥检查,我必须按如下方式构造字典:C# 为什么我的字典是<;字符串,字符串>;默认情况下不区分大小写?,c#,dictionary,case-sensitive,C#,Dictionary,Case Sensitive,据我所知,字典中的键检查默认情况下是区分大小写的,但至少在我的软件中,情况并非如此。为了对TryGetValue和Contains进行区分大小写的密钥检查,我必须按如下方式构造字典: Dictionary<string, string> a = new Dictionary<string,string>(StringComparer.Ordinal); Dictionary a=新字典(StringComparer.Ordinal); 那么我错了吗?字典默认不区分大小
Dictionary<string, string> a = new Dictionary<string,string>(StringComparer.Ordinal);
Dictionary a=新字典(StringComparer.Ordinal);
那么我错了吗?字典默认不区分大小写吗?否,默认不区分大小写
这可以通过以下小应用程序轻松显示:
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);
}
}
说明:
- 首先,添加键
a
用于检查是否找到键ContainsKey
和a
。只有前者是正确的a
- 然后,
用于添加键Add
。它不会抱怨,也就是说,它不认为密钥已经存在A
- 最后,使用
检查字典条目总数,并正确输出Count
,即2
和A
A
TKey
实例上提供的和的任何实现
对于string
而言,此实现在功能上等同于提供功能的实现
正如您在问题中所述,您可以使用字典构造函数的替代重载来提供将用作替代的实现。记不清了,但它可能是Add was和ContainsKey was,也可能不是Add was和ContainsKey was。不管怎样,这都很令人恼火……@托尼霍普金森:我真的不认为是这样。答案是因为我是个白痴。谢谢你的回复,我为浪费你的时间而道歉。将删除以下问题:p.
字典默认情况下使用顺序比较-如果你不这么认为,证明这一点将非常有帮助。当我回到我的windows框时,我将在我的代码中找到根,正如我说的,我记不清了。我清楚地记得获取密钥已经存在错误,当然可能是我检查了A,并添加了“A”…+1表示“正确”。我假设我可以信任Count
属性;)。泛型词典是泛型词典,对于string
或object
的任何其他后代都没有特例,但是string
确实有一个bool Equals(object)
和int-GetHashCode()
@Jodrell的特殊实现:是的,我澄清了这句话(通过在开头特别提到词典
),因为在问题中只考虑了字符串
-键词典。
True
False
True
True
2