对于我们的练习(使用Windows表单和类),我们被要求创建一个类列表(不同种类的动物,如狗,猫,牛等),并使它们出现在按字母顺序排序的列表框中。为此,我们使用了一个名为AnimalName的变量,它是Animal的名称。现在我想通过AnimalName对这些类进行排序,但我该怎么做呢?这是代码:
4
我知道在foreach声明之后,我必须编写一行代码,从列表框中获取动物的名字,并按字母顺序显示它们。我还想编写一行代码,使用动物的名称按字母顺序存储列表中的类。 (愤怒的乔,拳击手,e.t.c。)。我怎么写呢? 我试过像:
List<NamedAnimal> animalist = new List<NamedAnimal>
{
new Bear("Angry Joe") { }, new Cat("Snow White") { }, new Chicken("Henifer Aniston") { }, new Cow("Lolita") { }, new Dog("Vigi the loon") { },
new Duck("Ronald Duck") { }, new Horse("Shadow") { }, new Kangaroo("Boxer") { }, new Moose("Mickey Moose") {}
};
private void AnimalForm_Load(object sender, EventArgs e)
{
foreach (NamedAnimal animal in animalist)
{
listBoxAnimal.Items.Add(animal.AnimalName);
}
}
在foreach语句之后但是我得到了一个未处理的异常。
如何使用AnimalName ???
按字母顺序对列表中的类进行排序答案 0 :(得分:4)
您可以使用OrderBy
和OrderByDescending
方法对List<T>
进行排序,然后将排序后的列表设置为ListBox
的{{3}}:
listBoxAnimal.DataSource= animalist.OrderBy(x => x.AnimalName).ToList();
listBoxAnimal.DisplayMember = "AnimalName"
此外,通过将{AnimalName}之类的字段设置为ListBox
的{{3}},您可以告诉控件将该字段的字段显示为项目文本。
答案 1 :(得分:0)
要对名称进行排序,您可以尝试对Property AnimalName
进行排序。此外,您可以使用ListBox
属性为DataSource
定义数据源。
var animalNameSortedList = animallist.Select(x => x.AnimalName).ToList();
animalNameSortedList.Sort();
listBoxAnimal.DataSource = animalNameSortedList;
答案 2 :(得分:0)
我按照lamda表达式的建议,但他们似乎没有工作。但我确实找到了IComparable的另一种方式,所以我发布它以便每个人都可以有替代方案。
NamedAnimal类是这样的:
class NamedAnimal : Animal, IComparable<NamedAnimal>
{
public string AnimalName { get; set; }
public NamedAnimal(): base ()
{
//first constructor with the variables inherited from class Animal
}
public NamedAnimal() : base()
{
//2nd constructor with the variables inherited + the AnimalName
}
public virtual string GetNotes()
{
return "No notes available";
}
public int CompareTo(NamedAnimal otherAnimalName)
{
return AnimalName.CompareTo(otherAnimalName.AnimalName);
}
}
最后在Form load:
private void AnimalForm_Load(object sender, EventArgs e)
{
//solution with multiple inheritance comparer
animalist.Sort();
foreach (NamedAnimal animal in animalist)
{
listBoxAnimal.Items.Add(animal.AnimalName);
}
}
有效!!我根据名字按字母顺序对动物列表进行了分类! 所以除了lamda表达式之外,这将是第二个解决方案。 感谢您的帮助,因为我将来需要您的建议。 您可以将线程标记为已解决。