我有一个FileHelpers记录,其属性标记为[FieldOptional]
。
我很欣赏这可能要求该行的其余属性是可选的。
虽然可能仍然可以解析其余部分,但可能会变得更难。
但如果我的下一个属性标记为[FieldInNewLine]
,则FileHelpers仍然希望它为[FieldOptional]
。
但是我认为不要求这个属性(以及下一个属性)是可选的(可能更容易)。
所以使用此代码
[FixedLengthRecord(FixedMode.AllowLessChars)]
public class SomeRecord
{
[FieldFixedLength(10)][FieldTrim(TrimMode.Right)]
public string S1;
[FieldOptional][FieldFixedLength(10)][FieldTrim(TrimMode.Right)]
public string S2;
[FieldInNewLine][FieldFixedLength(10)][FieldTrim(TrimMode.Right)]
public string S3;
}
我收到FileHelpers.BadUsageException
条消息
字段:S2必须标记为可选,因为前一个字段标记为可选。 (尝试将[FieldOptional]添加到S2)
有人知道原因,为什么需要这样做? (虽然代码不是真正的代码,Exception-message确实错误地引用了错误的属性,但我没有说明。)
PS:我使用NuGet的2.9.9.0
答案 0 :(得分:2)
如果前一个字段是可选的,当前字段也是可选的https://github.com/MarcosMeli/FileHelpers/blob/master/FileHelpers/Core/RecordInfo.cs#L316
,则代码会检查该行的建议代码更改可能是
if (prevField.IsOptional && currentField.IsOptional == false &&
!currentField.InNewLine)
看起来他们将前一个字段传递给错误消息,当它应该是当前字段名称时,所以你也可以修复它
throw new BadUsageException(Messages.Errors.ExpectingFieldOptional
.FieldName(currentField.FieldInfo.Name)
.Text);