1

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

有谁知道原因,为什么需要这样做?(虽然代码不是真正的代码,异常消息确实错误地引用了错误的属性,但我没有编造。)

PS:我使用来自 NuGet 的 2.9.9.0

4

1 回答 1

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);
于 2013-07-22T16:10:47.103 回答