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)
}
Aquí List.sort espera un IComparer<p>
como parámetro. Además, funciona con la lambda como se muestra en la Línea 2. Pero cuando trato de hacer como en la Línea 1, me sale este error:IComparer utilizando Lambda Expresión
Cannot convert lambda expression to type System.Collections.Generic.IComparer' because it is not a delegate type
Me investigado esto por bastante tiempo, pero que todavía no entienden Es posible que mi comprensión de IComparer no sea del todo buena. ¿Puede alguien echarme una mano?
¿Dónde y cómo se define la comparación? –
@duluca Se define en el espacio de nombres 'System' como' delegado público int Comparación (T x, T y) '(menos las versiones 'in' in anteriores a .net 4). Está documentado [aquí] (http://msdn.microsoft.com/en-us/library/tfakywbh%28v=vs.100%29.aspx). –
sepp2k
'CompareTo()' es una comparación cultural específica. Algo como 'll.sort ((x, y) => String.CompareOrdinal (x.Name, y.Name))' puede ser más adecuado. –