无法弄清楚为什么我在尝试对列表进行排序时遇到无效错误。 parameterList是一个字典,然后我将它转换为一个通用列表,然后尝试排序。我要回来就行作为一个通用的列表,你可以看到:排序列表导致转换“无效”错误
List<KeyValuePair<string,string>> 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<string,string>>
这是什么空洞,在谈论.... ??
修订
该清单排序仍然不会排序,使用我从http://oauth.googlecode.com/svn/code/csharp/OAuthBase.cs
抓住的任何sugestions或我原来的分类代码所以这是我知道了:
Dictionary<string, string> authParamsNonNormalized = new Dictionary<string, string> {
{Constants.OAuthConsumerKey, consumerKey},
{Constants.OAuthSignatureMethodKey, methodType},
{Constants.OAuthTimestampKey, timeStamp()},
{Constants.OAuthTokenKey, accessToken},
{Constants.OAuthNonceKey, nonce},
{Constants.OAuthVersionKey, Constants.OAuthVersion}
};
然后我将其转换为一个通用的列表与ToList T(),因为这是一个进入的字典,我的方法,它包含以下代码:
List<KeyValuePair<string,string>> sortedParamList = parameterList.ToList();
sortedParamList.OrderBy(p => p.Key, StringComparer.Ordinal)
.ThenBy(p => p.Value, StringComparer.Ordinal).ToList();
当我检查sortedParamList时,它仍然是以相同的顺序...没有任何事情发生。
更新:
废话,是啊,我搞砸了最后一个,这里是工作代码:
List<KeyValuePair<string, string>> sortedParamList = parameterList.OrderBy(p => p.Key, StringComparer.Ordinal)
.ThenBy(p => p.Value, StringComparer.Ordinal).ToList();
我会考虑写一个比较器,因为这是一个非常复杂的比较。通过这种方式,你可以将那些令人讨厌的代码从该行中移出并放在自己的位置。 – 2012-02-29 19:28:11
Nooo ...'OrderBy' *返回排序后的可枚举值;它不会像Sort一样在原地进行排序。我知道这可能会让很多人感到困惑。您需要将'parameterList.OrderBy'操作的结果分配给目标变量。看我下面的例子。 – Douglas 2012-02-29 21:16:57
是啊我可能会在稍后创建一个实用方法...现在这只是代码来试图让这个工作,这是一个新的包装我正在建设,然后我会回去清理它。 – PositiveGuy 2012-02-29 21:25:02