我有一个 IList,其中包含一个对象,该对象具有名称、ID、位置、商店、人员和金额。我不想通过为每个属性编写语句来检索所有这些字段的值
前任。
IList<CutDetail> btiCollection;
btiCollection[0].Id
btiCollection[0].location
无论如何,我可以遍历此列表并检索其字段中的数据,而无需专门指定它们是什么?任何援助将不胜感激。
我有一个 IList,其中包含一个对象,该对象具有名称、ID、位置、商店、人员和金额。我不想通过为每个属性编写语句来检索所有这些字段的值
前任。
IList<CutDetail> btiCollection;
btiCollection[0].Id
btiCollection[0].location
无论如何,我可以遍历此列表并检索其字段中的数据,而无需专门指定它们是什么?任何援助将不胜感激。
如果要检索项目的所有属性的值,可以使用反射创建检索属性值的函数列表:
List<Person> people = new List<Person>();
people.Add(new Person() {Id = 3, Location = "XYZ"});
var properties = (from prop in typeof (Person).GetProperties(BindingFlags.Public | BindingFlags.Instance)
let parameter = Expression.Parameter(typeof (Person), "obj")
let property = Expression.Property(parameter, prop)
let lambda = Expression.Lambda<Func<Person, object>>(Expression.Convert(property, typeof(object)), parameter).Compile()
select
new
{
Getter = lambda,
Name = prop.Name
}).ToArray();
foreach (var person in people)
{
foreach (var property in properties)
{
string name = property.Name;
object value = property.Getter(person);
//do something with property name / property value combination.
}
}
也可以使用反射来检索属性值,但是如果您有一个非常长的列表/许多属性,这会相当慢并且可能会变得引人注目。
使用
List<CutDetail>
而不是IList<CutDetail>