如何在运行时获取对象集合中的对象类型?

时间:2011-04-12 14:29:18

标签: c#-3.0

在我的代码中,我在for循环中获取对象的类型(Party对象),并获取特定属性“firstname”的属性信息。 Parties []集合中的所有对象都返回相同的类型,因此我想在do while循环之外只获取一次类型,并且仍然需要能够从正确的party对象获取属性“firstname”。 有可能这样做吗?谢谢你的帮助。

public List<Party> Parties { get; set; }

PropertyInfo info = null;

i = 1
do
{

    foreach (Field field in TotalFields)
    {

        info = Parties[i - 1].GetType().GetProperty("firstname");

        //some other code here

    }
i++;
} while (i <= Parties.Count);

1 个答案:

答案 0 :(得分:1)

当您通过PropertyInfo对象获取属性的值时,需要传递一个从中获取值的对象实例。这意味着您可以为多个对象重用相同的PropertyInfo实例,因为它们与为PropertyInfo创建的类型相同:

// Note how we get the PropertyInfo from the Type itself, not an object 
// instance of that type.
PropertyInfo propInfo = typeof(YourType).GetProperty("SomeProperty");

foreach (YourType item in SomeList)
{
    // this assumes that YourType.SomeProperty is a string, just as an example
    string value = (string)propInfo.GetValue(item, null);
    // do something sensible with value
}

您的问题被标记为C#3,但为了完整性,值得一提的是,使用dynamic在C#4中可以使这更简单:

foreach (dynamic item in SomeList)
{
    string value = item.SomeProperty;
    // do something sensible with value
}