C# 如何在字典中重写重复键?

C# 如何在字典中重写重复键?,c#,linq,dictionary,comparison,C#,Linq,Dictionary,Comparison,我需要从HttpContext集合中获取数据,并将其存储在一个字典中,但我遇到了一个问题。如果我遇到带有字典中已有的密钥的密钥对,如何在字典中重写KeyValuePair 例如,我的功能: private static IDictionary<string, object> FromNameValueCollection(NameValueCollection rq) { return (from string query in rq select new KeyAn

我需要从
HttpContext
集合中获取数据,并将其存储在一个
字典中,但我遇到了一个问题。如果我遇到带有
字典
中已有的密钥的密钥对,如何在
字典
中重写
KeyValuePair

例如,我的功能:

private static IDictionary<string, object> FromNameValueCollection(NameValueCollection rq)
{
return (from string query in rq
        select new KeyAndValue { Key = query, Value = (object)rq[query] })
        .ToDictionary(ExtractKey, ExtractValue, StringComparer.InvariantCultureIgnoreCase);
}


我怀疑我不明白什么是
StringComparer.invariantCultureInogoreCase
,它是如何工作的。或我不知道如何正确使用它!所以,我需要帮助


谢谢

简单。。。不要使用字典,而应该考虑改成字典。它与字典几乎相同,不同的是它允许针对一个键存储多个值。所以

(from string query in rq
    select new KeyAndValue { Key = query, Value = (object)rq[query] })
    .ToLookup(ExtractKey, ExtractValue, StringComparer.InvariantCultureIgnoreCase);
根据您的评论,进行一点预筛选,只获取特定键的最后一个值

rq.Select(query => new KeyAndValue { Key = query, Value = (object)rq[query] })
  .GroupBy(kav => kav.Key)
  .Select(g => new KeyAndValue {Key = g.Key, Value = g.Last()})
  .ToDictionary(...

简单的。。。不要使用字典,而应该考虑改成字典。它与字典几乎相同,不同的是它允许针对一个键存储多个值。所以

(from string query in rq
    select new KeyAndValue { Key = query, Value = (object)rq[query] })
    .ToLookup(ExtractKey, ExtractValue, StringComparer.InvariantCultureIgnoreCase);
根据您的评论,进行一点预筛选,只获取特定键的最后一个值

rq.Select(query => new KeyAndValue { Key = query, Value = (object)rq[query] })
  .GroupBy(kav => kav.Key)
  .Select(g => new KeyAndValue {Key = g.Key, Value = g.Last()})
  .ToDictionary(...

简单的。。。不要使用字典,而应该考虑改成字典。它与字典几乎相同,不同的是它允许针对一个键存储多个值。所以

(from string query in rq
    select new KeyAndValue { Key = query, Value = (object)rq[query] })
    .ToLookup(ExtractKey, ExtractValue, StringComparer.InvariantCultureIgnoreCase);
根据您的评论,进行一点预筛选,只获取特定键的最后一个值

rq.Select(query => new KeyAndValue { Key = query, Value = (object)rq[query] })
  .GroupBy(kav => kav.Key)
  .Select(g => new KeyAndValue {Key = g.Key, Value = g.Last()})
  .ToDictionary(...

简单的。。。不要使用字典,而应该考虑改成字典。它与字典几乎相同,不同的是它允许针对一个键存储多个值。所以

(from string query in rq
    select new KeyAndValue { Key = query, Value = (object)rq[query] })
    .ToLookup(ExtractKey, ExtractValue, StringComparer.InvariantCultureIgnoreCase);
根据您的评论,进行一点预筛选,只获取特定键的最后一个值

rq.Select(query => new KeyAndValue { Key = query, Value = (object)rq[query] })
  .GroupBy(kav => kav.Key)
  .Select(g => new KeyAndValue {Key = g.Key, Value = g.Last()})
  .ToDictionary(...


您需要在类KeyAndValue上重写Equals和GetHashCode,因为字典将比较引用而不是您希望比较的值。

您需要在类KeyAndValue上重写Equals和GetHashCode,因为字典将比较引用而不是您希望比较的值。

您需要重写类KeyAndValue上的Equals和GetHashCode,因为字典将比较引用,而不是您希望比较的值。

您需要覆盖类KeyAndValue上的Equals和GetHashCode,因为字典将比较引用,而不是您希望比较的值。

字典的全部用途是比较其键它们是独一无二的。使用具有列表值的词典,如
dictionary
@RedSerpent,这就是我使用dictionary的原因。但正如我所说,我的资料来源是
NameValueCollections
<代码>我查看
对我不好。我的输出数据只能是
字典
StringComparer。InvariantCultureInogoreCase
完全按照它所宣布的那样:以忽略大小写的语言相关方式比较字符串,但它不适合在任何特定区域性中显示。它的主要应用是以跨区域性相同的方式对字符串进行排序。()字典的全部目的是它的键是唯一的。使用具有列表值的词典,如
dictionary
@RedSerpent,这就是我使用dictionary的原因。但正如我所说,我的资料来源是
NameValueCollections
<代码>我查看对我不好。我的输出数据只能是
字典
StringComparer。InvariantCultureInogoreCase
完全按照它所宣布的那样:以忽略大小写的语言相关方式比较字符串,但它不适合在任何特定区域性中显示。它的主要应用是以跨区域性相同的方式对字符串进行排序。()字典的全部目的是它的键是唯一的。使用具有列表值的词典,如
dictionary
@RedSerpent,这就是我使用dictionary的原因。但正如我所说,我的资料来源是
NameValueCollections
<代码>我查看对我不好。我的输出数据只能是
字典
StringComparer。InvariantCultureInogoreCase
完全按照它所宣布的那样:以忽略大小写的语言相关方式比较字符串,但它不适合在任何特定区域性中显示。它的主要应用是以跨区域性相同的方式对字符串进行排序。()字典的全部目的是它的键是唯一的。使用具有列表值的词典,如
dictionary
@RedSerpent,这就是我使用dictionary的原因。但正如我所说,我的资料来源是
NameValueCollections
<代码>我查看对我不好。我的输出数据只能是
字典
StringComparer。InvariantCultureInogoreCase
完全按照它所宣布的那样:以忽略大小写的语言相关方式比较字符串,但它不适合在任何特定区域性中显示。它的主要应用是以跨区域性相同的方式对字符串进行排序。()。我需要严格相关的对,因此我的输出数据必须仅为
IDictionary
。我问如何在当前版本中重写
KeyValuePair
dictionary@Matterai那么,您打算如何处理您的重复密钥?字典不能处理这个问题。这是一个键,一个值。这就是字典。要么你必须扔掉值,要么用另一种方法处理。如果我在字典对中遇到相同的键,我想写新的值,这就是我想要的=)对不起,但是@AlexPeta的提议更适合我的解决方案!非常感谢。我需要严格相关的对,因此我的输出数据只能是
IDictionary
。我问如何在当前版本中重写
KeyValuePair
dictionary@Matterai那么,您打算如何处理您的重复密钥?字典不能处理这个问题。这是一个键,一个值。这就是字典。要么你必须扔掉值,要么用另一种方式处理。如果我在字典对中遇到相同的键,我想写新的值,这就是我想要的=)对不起,但是@AlexPeta的提议是