字典键和值是否按相同顺序枚举

本文关键字:顺序 枚举 键和值 是否 字典 | 更新日期: 2023-09-27 18:26:55

我有一个场景,我必须将作为逗号分隔字符串的输入发送的Dictionary发送到存储过程。

我想知道,如果我像下面这样做,是否会有可能发送字典中给定关键字的错误值?

static void Main(string[] args)
{
    Dictionary<int, string> test = new Dictionary<int, string>();
    test.Add(1, "1");
    test.Add(3, "3");
    test.Add(4, "4");
    test.Add(5, "5");
    test.Add(2, "2");
    JoinTest(test);
}
private static void JoinTest(Dictionary<int, string> test)
{
    var keys = string.Join(",", test.Keys);
    var values = string.Join(",", test.Values);
}

字典键和值是否按相同顺序枚举

阅读文档。它明确指出:

Dictionary.KeyCollection中键的顺序未指定,但与values属性返回的Dictionary.ValueCollection中的关联值的顺序相同。

Dictionary.ValueCollection中的值的顺序未指定,但它与keys属性返回的Dictionary.KeyCollection中的关联键的顺序相同。

所以,是的,键和值是匹配的,但正如评论者所指出的,你可能已经有其他问题了。

Joey的答案是正确的,尽管只有在没有对字典进行修改的情况下才能保证顺序,正如评论中所指出的那样。如果你想确保订单是一样的,你可以这样做:

var dictionary = new Dictionary<int, string>();
var listOfKeyValuePairs = dictionary.ToList();
var keys = listOfKeyValuePairs.Select(kvp => kvp.Key);
var values = listOfKeyValuePairs.Select(kvp => kvp.Value);

键也不是null,也不是重复的(如果发生这种情况,它会抛出异常),所以它不会为特定键发送不正确的值(我想你担心你会为2个或多个项和字符串使用相同的键。Join不知道该选择哪一个)。有关词典的更多信息,请点击此处https://msdn.microsoft.com/en-us/library/k7z0zy8k(v=vs.110).aspx