c# - 如何使用 FileHelper 库获取分隔符的数量
问题描述
使用 FileHelper 库 如果记录在一行中没有预期数量的分隔符,有没有办法获得异常?
另一个问题是,如果特定字段(例如名称)超过预期长度,是否有办法获得异常?
如果我将名称设置为 maxLength 30,如果它高于 30,我会得到一个异常。
或者一个字段根本不等于预期长度?
解决方案
如果记录在一行中没有预期数量的分隔符,则获取异常
如果行中没有足够/太多的字段,则抛出异常是默认 FileHelpers 行为,因此无需执行任何特殊操作即可获得它:
[DelimitedRecord(",")]
public class Test
{
public int SomeInt { get; set; }
public string SomeString { get; set; }
public int SomeInt1 { get; set; }
public override string ToString() =>
$"{SomeInt} - {SomeString} - {SomeInt1}";
}
var result = new FileHelperEngine<Test>()
.ReadString(@"123,That's the string")
.Single();
Console.WriteLine(result);
会导致
FileHelpers.FileHelpersException: Line: 1 Column: 4. Delimiter ',' not found after field 'k__BackingField' (记录的字段较少,分隔符错误或下一个字段必须标记为可选)。在 FileHelpers.DelimitedField.BasicExtractString(LineInfo 行) 在 FileHelpers.DelimitedField.ExtractFieldString(LineInfo 行) 在 FileHelpers.FieldBase.ExtractFieldValue(LineInfo 行) 在 FileHelpers.RecordOperations.StringToRecord(对象记录, LineInfo 行, Object[] 值) 在 FileHelpers .FileHelperEngine`1.ReadStreamAsList(TextReader reader, Int32 maxRecords, DataTable dt)
如果特定字段(例如名称)超过预期长度,有没有办法获得异常
据我所知,FileHelpers 不支持开箱即用的标准 DataAnnotations(或者它实际上可以支持它,但由于https://github.com/dotnet/standard/issues/450它不起作用),所以您可能必须手动添加验证
所以,你安装https://www.nuget.org/packages/System.ComponentModel.Annotations/4.4.0
然后通过添加[StringLength(maximumLength: 5)]
到SomeString
模型上的属性
[DelimitedRecord(",")]
public class Test
{
public int SomeInt { get; set; }
[StringLength(maximumLength: 5)]
public string SomeString { get; set; }
public int SomeInt1 { get; set; }
public override string ToString() =>
$"{SomeInt} - {SomeString} - {SomeInt1}";
}
和
var result = new FileHelperEngine<Test>()
.ReadString(@"123,That's the string, 456")
.Single();
Console.WriteLine(result);
var context = new ValidationContext(result, serviceProvider: null, items: null);
var results = new List<ValidationResult>();
var isValid = Validator.TryValidateObject(result, context, results, validateAllProperties: true);
if (!isValid)
{
Console.WriteLine("Not valid");
foreach (var validationResult in results)
{
Console.WriteLine(validationResult.ErrorMessage);
}
}
您将获得以下输出
无效
SomeString 字段必须是最大长度为 5 的字符串。
推荐阅读
- android - 在 TextInputLayout 中切换密码的回调
- excel - 可以将 MS Excel 与带有 Web 插件的第 3 方系统集成
- php - Symfony 1.4 学说查询 addSelect
- c# - 过滤对象列表
- c++ - G++ 7.1.0 及更高版本支持此构造函数中的保证复制省略,但 Clang++ 4.0 及更高版本不支持
- java - 如何获取不一次显示所有行的表的行数?
- javascript - 无法更改图像的宽度和高度
- python - 如何以分数形式打印指数结果?
- asp.net-mvc - 'Signal R' 客户端 .js 未收到来自服务器的任何响应
- spring - Spring Integration:手动通道处理