排序列表导致转换’void’错误

无法弄清楚为什么我尝试对列表进行排序时出现无效错误。 parameterList是一个字典,然后我将它转换为通用列表然后尝试排序。 我希望将列表作为通用列表返回,如您所见:

List<KeyValuePair> sortedList = parameterList.ToList().Sort((left, right) => left.Key.Equals(right.Key, StringComparison.Ordinal) ? string.Compare(left.Value, right.Value, StringComparison.Ordinal) : string.Compare(left.Key, right.Key, StringComparison.Ordinal)); 

错误:“ Cannot convert source type 'void' to target type List<System.Collections.Generic.KeyValuePair>

它正在谈论的这个空虚是什么……?

更新

列表排序仍然不会使用我从http://oauth.googlecode.com/svn/code/csharp/OAuthBase.cs获取的任何sugestions或我的原始排序代码进行排序

所以这就是我的方式:

  Dictionary authParamsNonNormalized = new Dictionary { {Constants.OAuthConsumerKey, consumerKey}, {Constants.OAuthSignatureMethodKey, methodType}, {Constants.OAuthTimestampKey, timeStamp()}, {Constants.OAuthTokenKey, accessToken}, {Constants.OAuthNonceKey, nonce}, {Constants.OAuthVersionKey, Constants.OAuthVersion} }; 

然后我将它转换为带有ToList()t的通用列表,因为这是包含此代码的方法的传入字典:

 List<KeyValuePair> sortedParamList = parameterList.ToList(); sortedParamList.OrderBy(p => p.Key, StringComparer.Ordinal) .ThenBy(p => p.Value, StringComparer.Ordinal).ToList(); 

当我检查sortedParamList时,它仍然处于相同的顺序……没有任何反应。

更新:

废话,是的,我搞砸了最后一个,这是工作代码:

 List<KeyValuePair> sortedParamList = parameterList.OrderBy(p => p.Key, StringComparer.Ordinal) .ThenBy(p => p.Value, StringComparer.Ordinal).ToList(); 

List.Sort不返回排序列表; 相反,它执行“就地”排序,改变调用它的列表实例。 你可能想要使用:

 List> sortedList = parameterList.ToList(); sortedList.Sort((left, right) => left.Key.Equals(right.Key, StringComparison.Ordinal) ? string.Compare(left.Value, right.Value, StringComparison.Ordinal) : string.Compare(left.Key, right.Key, StringComparison.Ordinal)); 

以下LINQ在语义上是等效的,但更清晰:

 List> sortedList = parameterList.OrderBy(p => p.Key, StringComparer.Ordinal) .ThenBy(p => p.Value, StringComparer.Ordinal) .ToList(); 

List.Sort所有重载都在适当的位置排序,不返回任何内容。

也许IEnumerable.OrderBy更适合你想要做的事情。

Sort方法是List的实例方法,并对当前实例进行排序,因此不返回列表。

您需要拆分代码。

 List> sortedList = parameterList.ToList(); sortedList.Sort((left, right) => left.Key.Equals(right.Key, StringComparison.Ordinal) ? string.Compare(left.Value, right.Value, StringComparison.Ordinal) : string.Compare(left.Key, right.Key, StringComparison.Ordinal)); 
 .Sort((left, right) => ... 

Sort方法为void ,您不能将它放在List <...>中