如何迭代带有未知属性的IEnumerable

本文关键字:未知 属性 IEnumerable 何迭代 迭代 | 更新日期: 2023-09-27 18:05:32

我有许多不同的IEnumerable<T>,它们具有各种类型的许多属性。我希望能够通过IEnumerable下的每个属性进行迭代。

例子的想法:

var data = someSource.First();
data.ForEach(o => DoStuff(o));

不幸的是,我找不到这样做的方法,目前我必须知道属性的名称才能访问它。

任何帮助都将是非常感激的。

进一步澄清:我正在使用ADO。. NET/Entity Framework with MySQL,我有一个MySQL数据库表,格式如下:http://pastebin.com/P51hURaj

包含60个label和60个Types。

using (var connection = new hyperion_collectionsmaxEntities())
{
    var customs = connection.customs.First();
    //connection.customs is a DbSet<custom>
    //custom is defined as: http://pastebin.com/XW8pfzbD
    //Need to Iterate through Customs, Ex:
    //var custom1 = customs.label1; Through 60!?
}

我需要通过AddStatus(custom*)将所有60个custom输出到ListBox;

如何迭代带有未知属性的IEnumerable

我强烈质疑这里的预期用途,但是为了回答这个问题,您可以使用反射来获取每个对象的每个属性:

var propertyValues = someSource.SelectMany(obj => obj.GetType()
    .GetProperties(BindingFlags.Public | BindingFlags.Instance)
    .Select(p => p.GetValue(obj)));
foreach(var propertyValue in propertyValues)
    DoStuff(propertyValue);

或者在你的问题中更像linq - key:

someSource.SelectMany(obj => obj.GetType()
        .GetProperties(BindingFlags.Public | BindingFlags.Instance)
        .Select(p => p.GetValue(obj)))
    .ToList()
    .ForEach(o => DoStuff(o));