首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >遍历对象中的已知属性

遍历对象中的已知属性
EN

Stack Overflow用户
提问于 2009-11-05 01:04:57
回答 4查看 180关注 0票数 1

我有一个包含30个属性的对象,我知道这些属性的名称。这些属性被称为"ValueX“(1-30),其中X是一个数字。

如何在循环中调用value1 - value30?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2009-11-05 01:10:12

下面将把所有属性/值选择到一个匿名类型的IEnumerable中,其中包含您感兴趣的属性的名称/值对。它假设属性是公共的,并且您是从对象的方法访问的。如果属性不是公共的,那么您需要使用BindingFlags来表明您想要非公共的属性。如果来自对象外部,请将this替换为感兴趣的对象。

代码语言:javascript
复制
var properties = this.GetType()
                     .GetProperties()
                     .Where( p => p.Name.StartsWith("Value") )
                     .Select( p => new {
                           Name = p.Name,
                           Value = p.GetValue( this, null )
                      });    
票数 2
EN

Stack Overflow用户

发布于 2009-11-05 01:06:15

使用反射。

代码语言:javascript
复制
public static string PrintObjectProperties(this object obj)
{
    try
    {
        System.Text.StringBuilder sb = new StringBuilder();

        Type t = obj.GetType();

        System.Reflection.PropertyInfo[] properties = t.GetProperties();

        sb.AppendFormat("Type: '{0}'", t.Name);

        foreach (var item in properties)
        {
            object objValue = item.GetValue(obj, null);

            sb.AppendFormat("|{0}: '{1}'", item.Name, (objValue == null ? "NULL" : objValue));
        }

        return sb.ToString();
    }
    catch
    {
        return obj.ToString();
    }
}
票数 7
EN

Stack Overflow用户

发布于 2009-11-05 01:07:15

您可以考虑改用集合或自定义索引器。

代码语言:javascript
复制
public object this[int index]
{
    get
    {
        ...
    }

    set
    {
         ...
    }
}

然后你可以说;

代码语言:javascript
复制
var q = new YourClass();
q[1] = ...
q[2] = ...
...
q[30] = ...
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1675238

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档