为什么FileHelper即使在FieldInNewLine之后也需要FieldOptional?

时间:2013-07-22 15:32:27

标签: c# filehelpers

我有一个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

1 个答案:

答案 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);