我想按邮政地址排序,但我无法看到一些Linq函数尝试过它们,但我似乎无法获得所需的所有必需参数。 例如我看到了这个例子
list.Sort((p, q) => p.Category.CompareTo(q.Category)); /*has and error that says cannot convert lamba expressions to type '|Comparer' because it is not a delegate*/
但是我似乎不了解如何使用它。
MyCustomList.cs
class MyCustomList
{
private string name;
private string postalAddress;
public MyCustomList(string name, string postalAddress)
{
this.name = name;
this.postalAddress = postalAddress;
}
//getters and setters
public string Name
{
get
{
return name;
}
set
{
name = value;
}
}
public string PostalAddress
{
get
{
return postalAddress;
}
set
{
postalAddress = value;
}
}
}
Form1.cs
ArrayList list = new ArrayList();
list.Add(new MyCustomList("A somename","A Fake Postal Address");
list.Add(new MyCustomList("B somename","B Fake Postal Address");
list.Sort(); // Sort by Postal adress
答案 0 :(得分:2)
您真的需要使用ArrayList
吗?
这是.NET泛型时代以来的遗物,您应该尽可能地使用IEnumerable<T>
的实现,例如List<T>
。
LINQ在IEnumerable<T>
上运行,因此无法与您的ArrayList
一起使用,而您正在寻找的方法是OrderBy
或OrderByDescending
。
示例:
var list = new List<MyCustomList>();
list.Add(new MyCustomList("A somename","A Fake Postal Address"));
list.Add(new MyCustomList("B somename","B Fake Postal Address"));
list.OrderBy(cl => cl.Postcode); // Sort by Postal address
答案 1 :(得分:0)
首先停止使用ArrayList-它已经过时了。
要么像这样使用Array
var list = MyCustomList[2];
list[0] = new MyCustomList(...
list[1] = new MyCustomList(....
或使用类似List<T>
类的东西
var list = new List<MyCustomList>();
list.Add(new MyCustomList(...
list.Add(new MyCustomList(...
如果使用数组,则采用Comparison<T>
实例的Sort函数是静态的
您需要这样称呼它:
Array.Sort(list, (a,b) => a.PostalAddress.CompareTo(b.PostalAddress))
或在列表或数组上使用linq并使用OrderBy
var orderedList = list.OrderBy(a => a.PostalAddress);
答案 2 :(得分:0)
已被许多https://stackoverflow.com/a/57371579/6923146
批准对于使用linq在c#中的特定字段进行按顺序排序
list = list.OrderByDescending(x => x.Name).ToList();
list = list.OrderBy(x => x.Name).ToList();
//list.OrderBy(x => x.YourClassSpecificField).ToList()
示例:
请尝试在小提琴中运行以下代码:
using System;
using System.Collections.Generic;
using System.Linq;
public class Program
{
public static void Main()
{
List<MyCustomList> list = new List<MyCustomList>();
list.Add(new MyCustomList("A somename", "A Fake Postal Address"));
list.Add(new MyCustomList("B somename", "B Fake Postal Address"));
//list.Sort();
Console.WriteLine("descending order");
list = list.OrderByDescending(x => x.Name).ToList();
foreach (MyCustomList o in list)
{
Console.WriteLine(o.Name + " -- " + o.PostalAddress );
}
Console.WriteLine("ascending order");
list = list.OrderBy(x => x.Name).ToList();
foreach (MyCustomList o in list)
{
Console.WriteLine(o.Name + " -- " + o.PostalAddress );
}
}
public class MyCustomList
{
private string name;
private string postalAddress;
public string Name
{
get { return name; }
set { name = value; }
}
public string PostalAddress
{
get { return postalAddress; }
set { postalAddress = value; }
}
public MyCustomList(string name, string postalAddress)
{
this.name = name;
this.postalAddress = postalAddress;
}
}
}