无法弄清楚为什么我尝试对列表进行排序时出现无效错误。 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();
答案 0 :(得分:2)
List<T>.Sort
的所有重载都到位并且不返回任何内容。
或许IEnumerable<T>.OrderBy
更适合您尝试做的事情。
答案 1 :(得分:2)
Sort方法是List
的实例方法,并对当前实例进行排序,因此不会返回列表。
您需要拆分代码。
List<KeyValuePair<string,string>> 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));
答案 2 :(得分:2)
List<T>.Sort
未返回已排序的列表;相反,它执行“就地”排序,改变调用它的列表实例。你可能想要使用:
List<KeyValuePair<string, string>> 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<KeyValuePair<string, string>> sortedList =
parameterList.OrderBy(p => p.Key, StringComparer.Ordinal)
.ThenBy(p => p.Value, StringComparer.Ordinal)
.ToList();
答案 3 :(得分:0)
.Sort((left, right) => ...
Sort
方法为void
,您无法将其放入列表&lt; ...&gt;