C# 循环遍历对象中的已知属性

C# 循环遍历对象中的已知属性,c#,properties,C#,Properties,我有一个包含30个属性的对象,我知道这些属性的名称。这些属性称为valuex1-30,其中X是一个数字 如何在循环中调用value1-value30?使用反射 public static string PrintObjectProperties(this object obj) { try { System.Text.StringBuilder sb = new StringBuilder(); Type t = obj.GetType();

我有一个包含30个属性的对象,我知道这些属性的名称。这些属性称为valuex1-30,其中X是一个数字

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

使用反射

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();
    }
}
使用反射

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();
    }
}

您可以通过反射来获取类的属性信息对象并检查它们的名称。

您可以通过反射来获得该类的属性信息对象并检查它们的名称。

,您可以考虑使用集合或自定义索引器,而不是。
public object this[int index]
{
    get
    {
        ...
    }

    set
    {
         ...
    }
}
然后你可以说

var q = new YourClass();
q[1] = ...
q[2] = ...
...
q[30] = ...

您可以考虑使用集合或自定义索引器,而不是.< /P>

public object this[int index]
{
    get
    {
        ...
    }

    set
    {
         ...
    }
}
然后你可以说

var q = new YourClass();
q[1] = ...
q[2] = ...
...
q[30] = ...

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

var properties = this.GetType()
                     .GetProperties()
                     .Where( p => p.Name.StartsWith("Value") )
                     .Select( p => new {
                           Name = p.Name,
                           Value = p.GetValue( this, null )
                      });    

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

var properties = this.GetType()
                     .GetProperties()
                     .Where( p => p.Name.StartsWith("Value") )
                     .Select( p => new {
                           Name = p.Name,
                           Value = p.GetValue( this, null )
                      });    

为什么要投否决票?他的问题是Value1到Value30这就是定制索引器的目的。为什么要投否决票?他的问题是Value1到Value30这就是定制索引器的用途。