我有一个具有多个属性的类。每个属性都有另一个类。
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; }
}
Field类看起来像这样
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中的属性数量可以不时变化。所以我不能只依靠现有的领域来做。我需要从所有领域获得价值
您有两种选择:
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>();
如果你想得到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));
}
}
把它们放在一个数组中。
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 );
附:您可以考虑将这些字段公开为数组或List<Field>
。编号属性是代码气味。