这是一个C#winform项目,我将“Car”对象添加到ListBox中。我可以添加对象,甚至可以使用以下内容逐个查看属性:
Car car = (Car)listBox1.SelectedItem;
Console.Write(car.Name);
但是,我怎样才能从所有汽车中获得BodyColor属性?我试图使用foreach但没有成功。它只返回每个循环的Class名称而不是特定属性。任何帮助将不胜感激。
到目前为止,这是我的代码:
using System;
using System.Drawing;
using System.Windows.Forms;
namespace string_test
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
Car car1 = new Car();
car1.Name = "Bobs Car";
car1.BodyColor = Color.Black;
car1.IsSedan = true;
car1.TopSpeed = 110;
Car car2 = new Car();
car2.Name = "Bills Car";
car2.BodyColor = Color.Red;
car2.IsSedan = false;
car2.TopSpeed = 140;
listBox1.Items.Add(car1);
listBox1.Items.Add(car2);
}
private void button1_Click(object sender, EventArgs e)
{
// Here is where I am trying to get all BodyColor properties
// from every car in the ListBox.
// What I have below gets the BodyColor from whatever
// car is selected instead.
Car car = (Car)listBox1.SelectedItem;
Console.Write(car.BodyColor);
}
class Car
{
public string Name { get; set; }
public int TopSpeed { get; set; }
public bool IsSedan { get; set; }
public Color BodyColor { get; set; }
public override string ToString()
{
return Name;
}
}
}
}
答案 0 :(得分:1)
使用listbox.Items获取所有项目 使用LINQ Cast和Select获取BodyColors列表:
listBox1.Items.Cast<Car>().Select(c => c.BodyColor);
答案 1 :(得分:1)
我建议使用LINQ查询或LINQ方法。仅供参考,如果您不知道LINQ是什么,它可以使您作为程序员在实现IEnumerable接口的C#结构上进行可能在SQL查询中的等效调用。有关此问题的更多信息here。
LINQ方法
var carsFromBodyColor = listbox.Items.Where(obj=> obj!= nulll).Cast<Car>().Select(castedCar => castedCar.BodyColor);
foreach(var c in carsFromBodyColor)
Console.WriteLine(c.BodyColor);
LINQ QUERIES
var carColors = from Car carItem in listBox.Items
where carItem != null
select carItem .BodyColor;
foreach(var color in carColors)
Console.WriteLine(color);