如何使用未知属性迭代IEnumerable

时间:2014-05-28 00:26:21

标签: c# .net

我有许多不同的IEnumerable<T>,它们具有各种类型的众多属性。我希望能够遍历IEnumerable下的每个属性。

示例构思:

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

不幸的是我找不到办法做到这一点,目前我必须知道能够访问它的属性的名称。

非常感谢任何帮助。

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

它包含60个标签和60种类型的标签。

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个海关输出到ListBox中

1 个答案:

答案 0 :(得分:3)

我强烈质疑这里的用途,但要回答这个问题,你可以使用反射来获取每个对象的每个属性:

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-ey:

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