저는 람다 표현을 처음 접했고 이해가 안되는 부분을 만났습니다.누군가이 람다 정렬식이 작동하지 않는 이유를 말해 줄 수 있습니까?
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 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
그래서 나는 형식을 시도 :
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
내가 좋아하는이 원하는 람다에서 함께 구문 분석하기 전에 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.
허? 이 상황에서 일반 .ToString() (형식 문자열 없음)과 .ToString ("00") 사이에 다른 점은 무엇입니까?
또한이 방법을 얻는 방법에 대한 제안 사항이 있으십니까?
'ret'의 유형은 무엇입니까? 'List'을 만들면 두 번째 정렬 루틴과 관련된 컴파일 문제가 발생하지 않습니다. 재현성을 위해 어떤 버전의 컴파일러와 프레임 워크를 사용하고 있습니까? –
Ani
이상한 점은 컴파일 오류가 발생하지 않는다는 것입니다. ret는 List()입니다 (myList가 있어야하며 잘라 내기 및 붙여 넣기 오류가 발생 했음). 나는 vs2010, .net 4.0을 사용하고있다. –
BDW