Я новичок в лямбда-выражениях и столкнулся с чем-то, чего я не понимаю.
У меня есть такой объект:
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()));
и это работает, вроде. Проблема в том, что час - это int, поэтому иногда он не состоит из 2 цифр, в результате получается что-то вроде:
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
поэтому я пытаюсь отформатировать строку, чтобы добавить ноль, перед тем как выполнить синтаксический анализ в лямбда-выражении:
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.
А? Чем отличаются обычные .ToString () (без форматной строки) и .ToString ("00") в этой ситуации?
Кроме того, какие-либо предложения относительно того, как заставить это работать?