получить исключение, если в записи нет ожидаемого количества разделителей в строке
Поведение 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: строка: 1 столбец: 4. Разделитель ',' не найден после поля 'k__BackingField' (запись содержит меньше полей, разделитель неверен или следующее поле должно быть помечено как необязательное). в FileHelpers.DelimitedField.BasicExtractString (строка LineInfo) в FileHelpers.DelimitedField.ExtractFieldString (строка LineInfo) в FileHelpers.FieldBase.ExtractFieldValue (строка LineInfo) в объекте FileHelpers.RecordOperations.StringHlindInlineShringInfo. .FileHelperEngine`1.ReadStreamAsList (читатель TextReader, Int32 maxRecords, DataTable dt)
есть способ получить исключение, если конкретное поле, например Name, превышает ожидаемую длину
Насколько я вижу, 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 mu st - строка длиной не более 5.