Проверка полей на индексаторах

Я создаю новое сообщение, устанавливая индексаторы, например:

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; 
Другие вопросы по тегам