从ListBox中的对象获取特定属性

时间:2016-04-20 23:45:08

标签: c# listbox

这是一个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;
            }
        }
    }
}

2 个答案:

答案 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);