能否循环遍历C#类对象?

8

我有一个C#类,想要将其属性作为键/值对循环遍历,但不知道如何实现。

以下是我的期望:

Foreach (classobjectproperty prop in classobjectname)
{
    if (prop.name == "somename")
        //do something cool with prop.value
}
2个回答

13
是的:
Type type = typeof(Form); // Or use Type.GetType, etc
foreach (PropertyInfo property in type.GetProperties())
{
    // Do stuff with property
}

这样做不会给出它们作为键值对,但是你可以从PropertyInfo获得各种信息。

请注意,这仅提供公共属性。对于非公共属性,您需要使用带有BindingFlags的重载。如果您确实只想要特定实例的实例属性的名称/值对,您可以执行以下操作:

var query = foo.GetType()
               .GetProperties(BindingFlags.Public |
                              BindingFlags.Instance)
               // Ignore indexers for simplicity
               .Where(prop => !prop.GetIndexParameters().Any())
               .Select(prop => new { Name = prop.Name,
                                     Value = prop.GetValue(foo, null) });

foreach (var pair in query)
{
    Console.WriteLine("{0} = {1}", pair.Name, pair.Value);
}

0

请查看这里的解决方案 - 尽管该方法限制了公共属性,但应该适用于获取所有属性。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接