使用操作遍历 class 个属性?

Iterate through class properties using an action?

我正在使用 CsvHelper 导入 csv 文件,为此我使用映射 class 如下:

private class MyClassMap : ClassMap<MyClass>
{
    public MyClassMap ()
    {
        Map(m => m.Number).Name("Number");
        Map(m => m.Name).Name("Name");
    }
}

大多数 classes 包含更多属性。所以我首先做的是创建一个 Attribute class 并将属性添加到所有 public 属性。所以我可以更改映射代码:

private class MyClassMap : ClassMap<MyClass>
{
    public MyClassMap ()
    {
        var properties = typeof(MyClass).GetProperties();
        foreach (var property in properties)
        {
            var attr = property.GetCustomAttributes(typeof(HeaderAttribute), false).FirstOrDefault();
            if (attr != null)
            {
               //Here what?
            }
        }
    }
}

另外,我会把上面的ctor代码做成扩展方法

在这种情况下,我将如何使用 Map() 方法?

假设您的 HeaderAttribute 接受 Header 作为参数并将其公开到 Header 属性 :

    foreach (var property in properties)
    {
        var attr = property.GetCustomAttributes(typeof(HeaderAttribute), false).FirstOrDefault() as HeaderAttribute;
        if (attr != null)
        {
           //Here we use the Map method overload that takes a Type and a MemberInfo

            this.Map(typeof(MyClass), property).Name(attr.Header);
        }
    }