我有点重复了这个问题(BCD 中的 Track2 - 'D' 字符)。
将字段视为二进制(使用 BCD-Length-Indicator !!!)是一个可爱的技巧,它可能会成功。但是,仍然 - 没有方法:
public static FieldDescriptor.BinaryVar(..., ILengthFormatter lengthFormatter)
所以不要添加它(无论如何都应该这样做,对于 BinaryVar 字段的情况),可以添加:
public static FieldDescriptor.BcdVar(..., IFieldValidator validator)
并致电:
msg[Bit._035_TRACK_2_DATA] = FieldDescriptor.BcdVar(2, 37, FieldValidators.Track2);
'D' 将被视为 BCD - 银行知道什么...
关于右填充- 我想这就是调整器派上用场的地方。同样,我们需要添加一个带有Adjuster参数的静态方法,如下所示:
var setAdjuster = new LambdaAdjuster(setLambda: value => value.PadRight(value.length + 1, '0'));
这是真的 - 您可以在设置字段之前填充值,但这并不有趣(我们是极客,不是吗?)。
关于向 FieldDescriptor 添加静态方法- 我想可以使用泛型
public static IFieldDescriptor Create(ILengthFormatter lengthFormatter, IFieldValidator fieldValidator, IFormatter formatter, Adjuster adjuster)
但我是 C# 的新手,很高兴能得到关于我的理论的确认。
谢谢。