如何将已排序的字典转换为普通字典?

6
Dictionary<string, string> optionDictionary = new Dictionary<string, string>();

optionDictionary = ....;

SortedDictionary<string, string> optionsSorted;

if(sorting)
{
   optionsSorted = new SortedDictionary<string, string>(optionDictionary );
   // Convert SortedDictionary into Dictionary
}

return optionDictionary ;

你想返回一个 optionDictionary,使得当调用者使用它时,它会按照定义的顺序返回键(就像 SortedDictionary 一样),还是顺序无关紧要? - Renze de Waal
4个回答

17

您可以将您的 optionsSorted<TKey,TValue> 字典作为参数传递给一个新的 Dictionary<TKey,TValue> 实例,如下所示:

var dictionary = new Dictionary<type1,type2>(optionsSorted);

这将创建一个未按键排序的字典(因为字典不是SortedDictionary)。由于OP从未排序的字典中创建了一个SortedDictionary,我认为这并没有帮助。 - Renze de Waal
嗯...他在哪里说他想要一个排序的字典?他说他想将SortedDictionary转换为Dictionary。如果不使用SortedDictionary,你如何建议拥有一个排序的字典呢? - BFree
@BFree:我们需要他/她对自己想要的东西发表意见。如果您查看代码片段,您会发现他/她创建了一个字典,然后使用类似于您的构造来将其转换为排序字典(如果排序为真)。请参阅我的答案,了解我认为他/她的意思是什么。 - Renze de Waal
我的回答被接受了,所以我想我确实理解了他们想要的内容。 - BFree
我预计他/她没有意识到通过 new Dictionary<type1,type2<(optionsSorted) 创建的字典不能保证返回的键以定义好的顺序返回。 - Renze de Waal

11

尝试以下方法

var dictionary = optionsSorted.ToDictionary(x => x.Key, x=> x.Value);

2

我不太清楚您想要实现什么。我猜测您有一个返回字典的函数,并且当排序为真时,您希望它是一个排序过的字典。

如果是这样,那么您需要一个返回类型可以是字典或排序过的字典。

如果您想要一个单一的函数实现这个功能,我建议使用IDictionary作为方法的返回类型。


1

只需使用ToDictionary方法。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接