無法弄清楚爲什麼我在嘗試對列表進行排序時遇到無效錯誤。 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