Проверка полей на индексаторах
Я создаю новое сообщение, устанавливая индексаторы, например:
Iso8583 isoMsg = new Iso8583();
isoMsg[field] = value;
Я заметил, что я не получаю никаких исключений; следуя коду, который я видел, что валидатор не работает, когда я устанавливаю поля таким образом; он выполняется только при распаковке сообщения byte[]. Как вы думаете, было бы возможно адаптировать валидаторы формата и длины для запуска также при установке поля?
Заранее спасибо!
2 ответа
Валидаторы запускаются на полях при вызове .Pack()
на сообщение.
Я полагаю, вы просто установите значение одного из существующих полей из шаблона по умолчанию
При создании Iso8583() он использует шаблон DefaultTemplate, который добавляет набор полей по умолчанию в экземпляр сообщения при создании.
Свойство Indexer является производным от класса AMessage, от которого наследуется класс Iso8583.
public string this[int field]
{
get { return this.GetFieldValue(field); }
set { this.SetFieldValue(field, value); }
}
Эти методы:
protected string GetFieldValue(int field)
{
return this.bitmap[field] ? this.fields[field].Value : null;
}
protected void SetFieldValue(int field, string value)
{
if (value == null)
{
this.ClearField(field);
return;
}
this.GetField(field).Value = value;
}
Таким образом, кажется, что ваш код устанавливает значение для одного поля из шаблона по умолчанию
isoMsg[field] = value;