我有一个包含30个属性的对象,我知道它们的名字。这些属性称为“ValueX”(1-30),其中X是数字。
如何在循环中调用value1 - value30?
答案 0 :(得分:7)
使用反射。
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();
}
}
答案 1 :(得分:3)
您可以考虑使用集合或自定义索引器。
public object this[int index]
{
get
{
...
}
set
{
...
}
}
然后你可以说;
var q = new YourClass();
q[1] = ...
q[2] = ...
...
q[30] = ...
答案 2 :(得分:2)
以下将选择所有属性/值到一个匿名类型的IEnumerable中,该类型包含您感兴趣的属性的名称/值对。它假设属性是公共的,并且您正在从对象的方法。如果属性不公开,则需要使用BindingFlags来指示您需要非公共属性。如果来自对象外部,请将this
替换为感兴趣的对象。
var properties = this.GetType()
.GetProperties()
.Where( p => p.Name.StartsWith("Value") )
.Select( p => new {
Name = p.Name,
Value = p.GetValue( this, null )
});
答案 3 :(得分:1)
您可以使用Reflection执行此操作,获取类的PropertyInfo对象并检查它们的名称。