class p {
public string Name { get; set; }
public int Age { get; set; }
};
static List<p> ll = new List<p>
{
new p{Name="Jabc",Age=53},new p{Name="Mdef",Age=20},
new p{Name="Exab",Age=45},new p{Name="G123",Age=19}
};
protected static void SortList()
{
IComparer<p> mycomp = (x, y) => x.Name.CompareTo(y.Name); <==(Line 1)
ll.Sort((x, y) => x.Name.CompareTo(y.Name));<==(Line 2)
}
Ở đây List.sort mong đợi một tham số IComparer<p>
. Và nó hoạt động với lambda như trong dòng 2. Nhưng khi tôi cố gắng làm như trong Line 1, tôi nhận được lỗi này:IComparer sử dụng Biểu thức Lambda
Cannot convert lambda expression to type System.Collections.Generic.IComparer' because it is not a delegate type
tôi điều tra này trong một thời gian khá nhưng tôi vẫn không hiểu it.May sự hiểu biết của tôi về IComparer không phải là khá tốt.Có ai đó cho tôi một bàn tay?
Nơi/cách so sánh được xác định? –
@duluca Nó được định nghĩa trong không gian tên 'System' là' so sánh int ủy nhiệm công khai (T x, T y) '(trừ' in' trong các phiên bản trước .net 4). Nó được ghi lại [ở đây] (http://msdn.microsoft.com/en-us/library/tfakywbh%28v=vs.100%29.aspx). –
sepp2k
'CompareTo()' là một so sánh cụ thể về văn hóa. Một cái gì đó như 'll.sort ((x, y) => String.CompareOrdinal (x.Name, y.Name))' có thể phù hợp với bạn tốt hơn. –