#c# #.net #nullreferenceexception #filehelpers
#c# #.net #исключение nullreferenceexception #filehelpers
Вопрос:
При использовании библиотеки FileHelpers я получаю исключение NullReferenceException при попытке записать файл .csv.
Я сузил проблему. Всякий раз, когда у меня есть нулевое десятичное значение? оно выдает это исключение. Это отлично работает при чтении, просто не при записи.
Я включил пример, который показывает ту же проблему, что и мое приложение:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication11
{
class Program
{
static void Main(string[] args) {
rec record = new rec { id = 1, mydecimal = null };
List<rec> records = new List<rec> { record };
FileHelpers.FileHelperEngine<rec> engine = new FileHelpers.FileHelperEngine<rec>();
Console.WriteLine(engine.WriteString(records));
}
}
[FileHelpers.DelimitedRecord(",")]
public class rec
{
public int id;
public decimal? mydecimal;
}
}
Комментарии:
1. Значение с нулевым значением<decimal> не должно быть проблемой, если только вы не используете старую версию FileHelpers. filehelpers.com/example_nullable.html
2. Версия, которую я использую, — 2.0.0.0 и взята из nuget. Похоже, это последняя версия. Приведенный выше код выдает исключение. Я опубликовал полный проект на github, но это именно то, что вы видите здесь, завернутое в решение / проект vs2010: github.com/estubbs/Stack-overflow-fh-questions
Ответ №1:
Вы можете использовать пользовательский конвертер.
public class NullableDecimalConverter : FileHelpers.ConverterBase
{
public override object StringToField(string from)
{
return from;
}
public override string FieldToString(object fieldValue)
{
if (fieldValue == null)
return String.Empty;
return fieldValue.ToString();
}
}
Вам необходимо изменить свой класс записи, чтобы добавить [FieldConverter()]
атрибут к любому decimal?
полю.
[FileHelpers.DelimitedRecord(",")]
public class rec
{
public int id;
[FileHelpers.FieldConverter(typeof(NullableDecimalConverter))]
public decimal? mydecimal;
}
Ответ №2:
Ненавижу отвечать на свой собственный вопрос, но FileHelpers 2.9.9 устраняет эту проблему. Раньше он был доступен на официальном сайте (помечен как бета-версия), но сейчас не могу его найти.
Однако оно доступно в NuGet в пакете под названием FileHelpers-stable