c# - 向 CsvHelper.Configuration.ClassMap 对象添加验证(字符串)
问题描述
我使用 CsvHelper.Configuration.ClassMap 读取 csv 文件并面临数据验证。
我找到了 Validate 选项并写了一个简单的代码:
Map(m => m.Field).Name("myField").Validate(row => row.Contains('='));
但我不理解输出并且对可能的选项有点困惑。
所以,我的问题是:
如果它返回 true - 我会收到字符串吗?还是布尔真?之后我想将值添加到数据库中..
如果它返回 false - 我收到什么?而且,无论如何,该值不会添加到数据库中?
任何想法如何添加简单的验证?普通代码,未经验证:
地图(m => m.Field).Name("myField");
先感谢您!
解决方案
您可以使用 CsvHelper 27.1.1 以这种方式编写它
Map(m => m.Field).Name("myField").Validate(x => x.Field.Contains('='));
在 15.0.3 中,您不会使用 Field
Map(m => m.Field).Name("myField").Validate(x => x.Contains("="));
Validate 函数具有以下签名:
public virtual MemberMap<TClass, TMember> Validate(Validate validateExpression);
Validate Type 是一个这样声明的委托:
public delegate bool Validate(ValidateArgs args);
ValidateArgs 具有我在代码示例中使用的属性 Field。
如果在转换过程中条件为假,它将抛出 FieldValidationException。
您可以捕获此异常并添加一些逻辑。
- 如果为 true,则转换将按预期工作,您的字段将被映射。
- 将抛出 FieldValidationException。
- 请参见上面的代码。
推荐阅读
- php - 为什么我在使用 PHP 生成的 XML 文件中出现错误
- sql-server - 当辅助表在左连接中返回空值时从主表获取记录
- python - 如何在峰值上绘制索引号值的时间序列?
- css - Visual Studio 的 SCSS 编译器扩展
- java - 在主布局顶部自动弹出一个对话框
- java - java jvm 11 无法启动
- android - 为旧版操作系统设置通用按钮样式
- ionic-framework - 由于 es6 代码未转译 android 5.1.1,模拟器和设备上出现白屏
- python - 从数据框中的数组制作散点图
- javascript - 使用 java 脚本进行多值验证