私はラムダ式が初めてで、理解できないものに遭遇しました。誰かがこのラムダソート式がうまくいかない理由を教えてもらえますか?
私はそうのようなオブジェクトを持っている:
class MyListItem
{
string date; //date in the format "2010-12-05"
int Hour; //hour of day as an int
}
は、私はいくつかの日付と時間を表す、これらのオブジェクトのリストを持っています。
は、私は、日付と時間によって、このリストをソートしたいので、私はこれを試してみてください。
List<MyListItem> myList = new List<MyListItem>();
myList = getsomedata(); //populate list
myList.Sort((a, b) => (a.date + a.Hour.ToString()).CompareTo(b.date + b.Hour.ToString()));
、それは一種の、動作します。それはそうのようなソート結果として、時には2桁ではありませんので、問題は、時間がintであるということである。
2010-12-05 1
2010-12-05 10
2010-12-05 11
2010-12-05 12
2010-12-05 13
2010-12-05 2
2010-12-05 21
2010-12-05 22
私はそれのようになりたい:
2010-12-05 1
2010-12-05 2
2010-12-05 10
2010-12-05 11
2010-12-05 12
2010-12-05 13
2010-12-05 21
2010-12-05 22
ので、私はフォーマットしてみてくださいラムダで一緒に解析する前に文字列を0にする:
ret.Sort((a, b) => (a.date + a.Hour.ToString("00")).CompareTo(b.date + b.Hour.ToString("00")));
コンパイルされません。それは私に教えてくれる:
Cannot convert lambda expression to type 'Systems.Collections.Generic.IComparer<MyListItem>' because it is not a delegate type.
Huh?この状況でプレーン.ToString()(フォーマット文字列なし)と.ToString( "00")の違いは何ですか?
また、この方法をどのように取得するかについてのご意見はありますか?
「ret」の種類は何ですか? 'List'を作成すると、2番目のソートルーチンのコンパイルに問題はありません。再現性のために、どのバージョンのコンパイラとフレームワークを使用していますか? –
Ani
コンパイルエラーが発生しないことを不思議です。 retはリスト()です(myList、cut&pasteエラーがあったはずです)。私はvs2010、.net 4.0を使用しています。 –
BDW