排序列表导致转换’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
不返回排序列表; 相反,它执行“就地”排序,改变调用它的列表实例。 你可能想要使用:
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
所有重载都在适当的位置排序,不返回任何内容。
也许IEnumerable
更适合你想要做的事情。
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 <...>中