Предотвращение бокса / распаковки при неизвестном вводе - PullRequest
1 голос
/ 25 февраля 2011

Я создаю приложение, которое анализирует XML и извлекает некоторые данные.Каждый узел xml указывает данные (const), имя столбца набора записей для получения данных из (var), подмножество возможных значений данных в зависимости от некоторых условий (enum) и другие.Он также может указывать, наряду с данными, формат, в котором данные должны быть показаны пользователю.

Дело в том, что для каждого типа узла мне нужно по-разному обрабатывать значения и выполнять некоторые актиноны, поэтому для каждого узла мне нужно сохранить возвращаемое значение во временной переменной для последующего форматирования.Я знаю, что могу отформатировать его прямо здесь и вернуть, но это будет означать повторяться, и я ненавижу это делать.

Итак, вопрос: как я могу сохранить возвращаемое значение во временной переменной,избегая упаковки / распаковки, когда тип неизвестен, и я не могу использовать универсальные шаблоны?

PS : я разрабатываю синтаксический анализатор, схему XML и представление, которое будет заполнять набор записейпоэтому все изменения правдоподобны.


Обновление

Я не могу опубликовать ни код, ни значения XML, но это структура XML и фактические теги.

<?xml version='1.0' encoding='utf-8'?>
<root>
    <entity>

        <header>
            <field type="const">C1</field>
            <field type="const">C2</field>

            <field type="count" />
            <field type="sum" precision="2">some_recordset_field</field> 

            <field type="const">C3</field>
            <field type="const">C4</field>
            <field type="const">C5</field>
        </header>

        <detail>
            <field type="enum" fieldName="some_recordset_field">
                <match value="0">M1</match>
                <match value="1">M2</match>
            </field>
            <field type="const">C6</field>

            <field type="const">C7</field>
            <field type="const">C8</field>
            <field type="var" format="0000000000">some_recordset_field</field>
            <field type="var" format="MMddyyyy">some_recordset_field</field>
            <field type="var" format="0000000000" precision="2">some_recordset_field</field>
            <field type="var" format="0000000000">some_recordset_field</field>
            <field type="enum" fieldName ="some_recordset_field">
                <match value="0">M3</match>
                <match value="1">M4</match>
            </field>
            <field type="const">C9</field>
        </detail>

    </entity>
</root>

1 Ответ

0 голосов
/ 25 февраля 2011

Вы пробовали использовать тип var ?Таким образом, вам не нужно знать тип каждого узла.Также будет полезен небольшой пример вашего сценария.

...