c# - 编写时在 CsvHelper 中转换或过滤成员
问题描述
想象一下我有这样的课
public class DataGroup
{
public string DataA { get; set; }
public string DataB { get; set; }
public bool Updated { get; set; }
}
我需要写一个空字符串或"N/A"
for DataA
and DataB
when Updated == false
,以及实际值 when Updated == true
;
这对 CsvHelper 可行吗?
类型转换似乎不起作用,因为它只访问最终成员,因此无法读取Updated
.
该课程有一种Conversion
方法,MapMember
但似乎仅适用于阅读。
解决方案
您可以使用该Convert
方法。此方法可能有点令人困惑,因为它可以是ConvertFromString
或ConvertToString
,具体取决于您如何使用它。
ConvertFromString 与_Row
CsvReader
Map(m => m.DataA).Convert(m => m.Row.GetField("DataA") + m.Row.GetField("Updated"));
ConvertToString 与_Value
CsvWriter
Map(m => m.DataA).Convert(m => m.Value.DataA + m.Value.Updated);
你想要ConvertToString
,所以你ClassMap
可能是这样的。
public class DataGroupMap : ClassMap<DataGroup>
{
public DataGroupMap()
{
Map(m => m.DataA).Convert(m =>
{
if (m.Value.Updated) { return m.Value.DataA; }
return "N/A";
});
Map(m => m.DataB).Convert(m =>
{
if (m.Value.Updated) { return m.Value.DataB; }
return "N/A";
});
Map(m => m.Updated);
}
}
推荐阅读
- go - 连接到 Go Gin 时的 Angular 8 CORS
- java - 如何在 Android 应用中监听蓝牙耳机按钮?
- tcl - 如何通过 Tcl 语言创建临时 shellscript 文件和目录?
- sql - SQL Table 数十亿条目 - 寻找性能建议
- graphql - 错误:无效的 AST 节点:{"input":"** } on graphql 突变(放大客户端)
- javascript - 无法使用 Lightning 组件中的 FileReader 对象读取和上传文件
- node.js - JHipster 安装失败
- webpack - webpack 带有样式加载器的错误
- java - IntelliJ 中文件更改的代码生成
- c - 将结构传递给C中的函数时损坏