我有一个具有多个属性的类。每个属性都有另一个类。
public class FirstClass
{
public Field Field1 { get; set; }
public Field Field2 { get; set; }
public Field Field3 { get; set; }
public Field Field4 { get; set; }
public Field Field5 { get; set; }
}
字段类看起来像这样
public class Field
{
public string Label { get; set; }
public string ExternalId { get; set; }
public int FieldId { get; set; }
public string Type { get; set; }
}
是否可以从FirstClass的每个属性中获取所有FieldId?
我想要的就是这样。
var fieldIds = // go through each fields (Field1 to FieldN) and select FieldId from each property.
FirstClass中的属性数量可以随时变化。所以我不能只依靠现有的领域。我需要从所有领域中获取价值
答案 0 :(得分:5)
您有两个选择:
“编译时间”
public class FirstClass
{
public Field Field1 { get; set; }
public Field Field2 { get; set; }
public Field Field3 { get; set; }
public Field Field4 { get; set; }
public Field Field5 { get; set; }
public IEnumerable<Field> AllFields =>
new [] { Field1, Field2, Field3, Field4, Field5 };
}
“运行时间”(使用反射)
var firstClassInstance = new FirstClass();
var allFields = firstClassInstance.GetType().GetProperties()
.Select(p => p.GetValue(firstClassInstance))
.OfType<Field>();
答案 1 :(得分:3)
如果要获取FieldId
的每个值,请尝试以下方法:
var FieldIds = new List<object>();
var foo = new FirstClass();
foo.Field1 = new Field() { FieldId = 1 };
foo.Field2 = new Field() { FieldId = 2 };
foo.Field3 = new Field() { FieldId = 3 };
foo.Field4 = new Field() { FieldId = 4 };
foo.Field5 = new Field() { FieldId = 5 };
foreach (var prop in foo.GetType().GetProperties())
{
if(prop.PropertyType == typeof(Field))
{
var field = prop.GetValue(foo, null) as Field;
FieldIds.Add(field.GetType().GetProperty("FieldId").GetValue(field,null));
}
}
答案 2 :(得分:1)
将它们放入数组中。
var o = new FirstClass();
var fields = new Field[] { o.Field1, o.Field2, o.Field3, o.Field4, o.Field5 };
然后选择数组。
var fieldIds = fields.Select( f => f.FieldId );
P.S。您可以考虑将这些字段作为数组或List<Field>
公开。编号属性是一种代码气味。