使用操作遍历 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);
}
}
我正在使用 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);
}
}