C# 为什么我的字典是<;字符串,字符串>;默认情况下不区分大小写?

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); 那么我错了吗?字典默认不区分大小

据我所知,字典中的键检查默认情况下是区分大小写的,但至少在我的软件中,情况并非如此。为了对TryGetValue和Contains进行区分大小写的密钥检查,我必须按如下方式构造字典:

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