【问题标题】:Convert instances of objects to be able to loop through将对象的实例转换为能够循环
【发布时间】:2013-06-22 10:50:54
【问题描述】:

我有一个对象,它的属性包括字符串、整数和双精度。 我有对象的三个实例:item1、item2、item 3。

我可以通过说 item1.name 等来打印出值。 但是我怎样才能遍历对象并打印值呢? 我认为我不能将对象转换为列表或数组,因为对象具有不同的类型 - 对吧?

【问题讨论】:

  • 你能澄清一下所有对象是否都属于同一类型吗?
  • 对象属性是不同的类型 - 我有 ObjectName.ID = int、ObjectName.Name = string 等。
  • item1、item2、item3是同一个Type吗?如果是这样,您可以列出它们。
  • Item1、Item2、Item3都是同一个Object的实例。
  • 说它们都是同一个对象的实例是没有意义的。它们都是同一个类的实例? (根据定义,对象是类的实例)。

标签: c# asp.net


【解决方案1】:

如果你的意思是它们都是同一个类的实例,那么在这种情况下你可以做什么是非常基本的。如果是这种情况,您可以创建该类类型的列表。然后以您希望的任何方式迭代对象,您将能够打印出该类包含的任何公共属性。

var examples = new List<ExampleObject>()
{
   new ExampleObject { ID = 1, Name = "Display" },
   new ExampleObject { ID = 2, Name = "Display2" },
};

examples.ForEach(x => Console.WriteLine("id = {0}, name =  {1}", x.ID, x.Name));

【讨论】:

    【解决方案2】:

    如果它们都具有“名称”属性,您可以创建一个包含该属性的接口。

    public Interface IShowName
    {
        string Name { get; }
    
    }
    

    然后让每种类型都实现 IShowName(根据您的说法,他们已经这样做了)。然后您可以将它们全部放入 IShowName 列表中。

    var myList = new List<IShowName>();
    myList.Add(obj1);
    myList.Add(obj2);
    myList.Add(obj3);
    
    foreach(var nameShower in myList)
    {
        System.Console.WriteLine(nameShower.Name);
    }
    

    【讨论】:

    • 感谢您的回答,但我认为这不是我需要的 - 该对象有 7 个属性,我有 3 个属性实例 - 所以我需要遍历每个实例并显示值7 个属性中的每一个。 _ 这有意义吗?
    • 那么,对于一个给定的对象,你想写出所有的属性吗?而且你不知道对象的类型?听起来,Reflection 就在你的未来。
    【解决方案3】:

    你可以通过反射来做到这一点:

    foreach (PropertyInfo propertyInfo in obj1.GetType().GetProperties())
    {
        //If property is public
        if (propertyInfo.CanRead)
        {
            object propValue = propertyInfo.GetValue(obj1, null);
            System.Console.WriteLine(propValue.ToString());
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-09-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-26
      • 1970-01-01
      相关资源
      最近更新 更多