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)
}
Здесь List.sort ожидает параметр IComparer<p>
. И это работает с лямбда , как показано на линии 2. Но когда я пытаюсь сделать, как в строке 1, я получаю эту ошибку:IComparer с использованием выражения Lambda
Cannot convert lambda expression to type System.Collections.Generic.IComparer' because it is not a delegate type
я исследовал это в течение достаточно долгого времени, но я до сих пор не понимаю, it.Maybe мое понимание IComparer не очень хорошо. Может кто-нибудь дать мне руку?
Где и как сравнивается? –
@duluca Он определен в пространстве имен 'System' как' public delegate int Comparison (T x, T y) '(минус' in' в версиях до .net 4). Он задокументирован [здесь] (http://msdn.microsoft.com/en-us/library/tfakywbh%28v=vs.100%29.aspx). –
sepp2k
'CompareTo()' - сравнение, специфичное для культуры. Что-то вроде 'll.sort ((x, y) => String.CompareOrdinal (x.Name, y.Name))' может подойти вам лучше. –