【问题标题】:How to loop through the properties of a Class? [duplicate]如何循环遍历类的属性? [复制]
【发布时间】:2015-08-09 03:32:51
【问题描述】:

我发现这个问题很常见,但我没有找到我要找的东西。也许是因为我想做点别的事情。

所以我目前正在为网络爬虫编写代码,需要比较列表中的对象。 我想做的是遍历列表,找到重复项,当我发现重复项时合并这些。

合并时我想:
- 保持最新/最新对象的信息。
- 如果最新对象的字段为空,则取旧对象字段的值

我认为循环遍历两个对象的属性是最简单的。

我已经尝试了很多使用反射的东西,我所能实现的就是显示一个类的属性名称。我想要的是他们的价值观。

如果可能的话,我会使用这样的循环:

foreach(property prop in myObject)
{
    string value = myObject.prop;
    //do something
}

这可能吗?还是我错过了什么?

【问题讨论】:

  • 需要比较列表中的对象 什么对象?你能控制他们吗?
  • 不能使用IComparable接口吗?你真的需要使用反射吗?
  • 你知道这些对象是什么,还是它们本质上是动态的?
  • 比较和合并这些对象的方式告诉我它们非常相似。为什么不使用接口或通用超类来抽象您要比较/合并的属性?为此使用反射听起来是个非常糟糕的主意。
  • 是的,我控制着它们。它们是我创建的类的相同对象。我既不知道如何使用 IComparable 也不知道如何使用超类。你能解释一下吗?

标签: c# class reflection properties


【解决方案1】:

类似:

object obj = new object();
PropertyInfo[] properties = obj.GetType().GetProperties();
foreach (var p in properties)
{
    var myVal = p.GetValue(obj);
}   

请注意,您需要分配对象并将其传递给 PropertyInfo。

【讨论】:

    【解决方案2】:

    为了使用 foreach 循环,您需要使用 <dictionary>,这正是您需要的。将您的类存储在 <dictionary> 列表中,为其提供 T 键和 T 值并循环遍历该类。这样,您就可以更轻松地跟踪您的班级并维护您想要的过滤器。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-07-05
      • 1970-01-01
      • 1970-01-01
      • 2023-01-11
      • 1970-01-01
      • 2014-05-16
      • 1970-01-01
      • 2016-05-26
      相关资源
      最近更新 更多