我有一个场景,我必须将作为逗号分隔字符串的输入发送的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