检查作为对象列表的类属性的属性

时间:2017-06-30 22:46:02

标签: c# system.reflection

我有一个类,一些类属性是类列表。我想现在浏览列表中的所有元素。但无论我尝试什么,我都无法抓住列表中的对象。有没有人为我的问题找到解决方法?

 public class Program
 {
    static void Main(string[] args)
    {
       Tire black = new Tire()
       {
          id = 5
       };
       Tire red = new Tire()
       {
          id = 8
       };
       Tire purple = new Tire()
       {
          id = 10
       };

       //Create my List
       List<Tire> mylist = new List<Tire>();
       List.Add(black);
       List.Add(red);
       List.Add(purple);


       //Define the car
       car mycar = new car()
       {
          id = 20,
          Tire = mylist
       };

在这里,我的主要创建了一些类和列表:

var type = car.GetType();
var properties = type.GetProperties();
foreach (var propertyInfo in properties)
{
    if (propertyInfo.ToString().Contains("List"))
    {
        var propValue = propertyInfo.GetValue(this);
        ...

我现在想要浏览我的Tire-property-list中的所有元素,但无论我做什么,我都不会得到List-Property中的实际对象(黑色,红色和紫色)​​。 这是我到目前为止所尝试的:

df['sales'] = [ index for index, val in enumerate(['sales', 'accounting', 'hr', 'technical', 'support', 'management',
    'IT', 'product_mng', 'marketing', 'RandD'])]

如果我调试并查看propValue变量,我会看到我的所有三个对象,但我找不到实际检查它们并再次获取其属性的方法...

2 个答案:

答案 0 :(得分:0)

简单地说

foreach (var tire in car.attributes)
{ 
    // tire is an instance of the Tire class
}

答案 1 :(得分:0)

您的实施中存在许多问题:

填充列表时

//Create my List
List<Tire> mylist = new List<Tire>();
List.Add(black);
List.Add(red);
List.Add(purple);

如果您想在列表中添加轮胎,则应该是:

//Create my List
List<Tire> mylist = new List<Tire>();
mylist.Add(black);
mylist.Add(red);
mylist.Add(purple);

在您的课程结构

你的车有几个轮胎,对吧?因此,班级应该有轮胎清单,而不仅仅是轮胎:

public class Car 
{
    public int Id {get; set;}
    public List<Tire> TireList {get; set;}
}

当您要实例化汽车时

在构造函数调用中无法访问mylist,必须在调用构造函数后设置它(或者创建一个可以在参数中包含轮胎列表的构造函数):

//Define the car
Car mycar = new Car()
{
    Id = 20
};

mycar.TireList = mylist;

快速工作演示

我没有解决所有问题,但这是一个工作示例(ConsoleApp):

class Program
{
    static void Main(string[] args)
    {
        Tire black = new Tire()
        {
            Id = 5
        };
        Tire red = new Tire()
        {
            Id = 8
        };
        Tire purple = new Tire()
        {
            Id = 10
        };

        //Create my List
        List<Tire> mylist = new List<Tire>();
        mylist.Add(black);
        mylist.Add(red);
        mylist.Add(purple);


        //Define the car
        Car mycar = new Car()
        {
            Id = 20
        };

        mycar.TireList = mylist;

        foreach (var tire in mycar.TireList)
        {
            Console.WriteLine(tire.Id);
        }

        Console.ReadKey();
    }
}

public class Car
{
    public int Id { get; set; }
    public List<Tire> TireList { get; set; }
}

public class Tire
{
    public int Id { get; set; }
    public double Value { get; set; }
}

注意

最后但同样重要的是,请注意在对象名称中使用大写字母