我最近发现了生产代码,包括对 .NET 的排序Dictionary<string,CustomObject>
。基本上是将字典复制到临时字典,然后 .Clear() 原始字典并插入通过 Linq 表达式排序的 KeyValuePairs,按 CustomObjects 中的 DateTime 值。
我预计此代码不起作用并且已经将其删除,并期望无法对字典(以及 HashSet)进行排序。然后我编写了以下测试代码,令我惊讶的是,当使用 foreach 循环进行迭代时,它显示了字典的排序输出。
这是当前实现中的随机效应Dictionary<TKey, TValue>
,它可能在当前情况下有效,但在 .NET 的另一个实现中失败?或者它是在 .NET 词典中使用的标准功能?
我仍然认为生产代码有问题,但可以正常工作。如果订单是在我找到排序例程的地方以外的地方使用的,我应该删除它吗,需要长时间的测试,还是让它保持原样安全?
这是我的测试代码:
static void Main(string[] args)
{
var rnd = new Random();
var dict = new Dictionary<int, string>();
for (int i = 0 ; i < 10 ; i++)
{
int rndValue;
do
{
rndValue = rnd.Next(100);
}
while (dict.ContainsKey(rndValue));
dict.Add(rndValue, "MyValue#" + i);
}
foreach (KeyValuePair<int, string> pair in dict)
{
Console.WriteLine("Key: " + pair.Key + ", Value: " + pair.Value);
}
Console.Write("Enter...");
Console.ReadLine();
var dictBuff = dict.ToDictionary(p => p.Key, p => p.Value);
dict.Clear();
var sortdict = from pair in dictBuff orderby pair.Key ascending select pair;
foreach (KeyValuePair<int, string> pair in sortdict)
{
dict.Add(pair.Key, pair.Value);
}
Console.WriteLine("'Sorted' Dictionary:");
foreach (KeyValuePair<int, string> pair in dict)
{
Console.WriteLine("Key: " + pair.Key + ", Value: " + pair.Value);
}
Console.Write("Enter...");
Console.ReadLine();
}