Как определить значение по умолчанию для поля класса элемента FileHelpers - PullRequest
5 голосов
/ 05 января 2010

Я пытаюсь загрузить файл CSV (разделителями являются ';' и кавычки '' ').

Я успешно создал все (мастер-инструмент великолепен), но есть одна вещь, для которой я не могу найти решение.

По сути, у меня есть целочисленный столбец (System.Int32). Теоретически большинство записей будут иметь положительное целое значение в этом столбце. Однако иногда я могу встретить значение «N / A» в этом столбце. Я хочу, чтобы FileHelpers назначил значение по умолчанию (-1 отлично работает), когда он встречает «N / A» в этом столбце.

Кто-нибудь знает, возможно ли это?

PS: мне может потребоваться сделать то же самое для поля System.DateTime (иногда оно также может содержать «N / A»).

Ответы [ 2 ]

5 голосов
/ 05 января 2010

Как сказал Брэндон, вам нужно использовать этот конвертер

// In your class
[FieldConverter(typeof(NoValueConverter))]
public int Number;

// Te Converter
public class NoValueConverter : ConverterBase
{
    public override object StringToField(string sourceString)
    {
       if (sourceString.Trim().ToUpper() == "N/A")
        return -1; // or int.MinValue;
       else
        return Integer.Parse(sourceString);
    }

    public override string FieldToString(object fieldValue)
    {
        return fieldValue.ToString();
    }

}

Мы рады, что вам понравился мастер :) (мы работаем над классной функцией автоопределения, чтобы упростить создание класса отображения)

5 голосов
/ 05 января 2010

Лучший способ сделать то, что вы хотите, - это использовать атрибут FieldConverter в этих полях и создать собственные классы конвертера, которые присваивают значение по умолчанию, которое вы хотите, чтобы поле имело.

Вам необходимо создать класс, который наследует ConverterBase, а затем предоставить реализации для двух виртуальных методов, StringToField() и FieldToString().

В методе FieldToString() вы проверите, равна ли строка значению «N / A». Если это так, верните желаемое значение по умолчанию.

Вам понадобятся два разных класса, один из которых может обрабатывать Int32, а другой - DateTime.

В документации FileHelpers есть пример того, как это сделать. Ссылка

...