Получить аргумент FormatException

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

object val = SomeClass.ExtractValue( someObject );

Теперь, где-то еще дальше, сторонняя библиотека пытается проанализировать значение DateTime, которое имеет неожиданный формат, и выдает исключение FormatException.

В этом случае я хотел бы получить строку, которую не удалось проанализировать, и попытаться проанализировать ее самостоятельно. Что-то вроде этого:

object val;
try
{
    val = SomeClass.ExtractValue( someObject );
}
catch( FormatException e )
{
    string failed = e.GetParseArgument( );
    val = DateTime.Parse( failed + " 2010" );
}

Да, просто добавлять год довольно бессмысленно, но вы поняли. Сторонняя библиотека не поддерживает все нужные мне форматы, но я также не могу легко получить данные из "someObject". (Да, я мог бы попытаться повторить то, что библиотека делает с помощью Reflector, но я бы хотел этого избежать.)

Есть какой-либо способ сделать это? Благодарю.

1 ответ

Поскольку someObject является IDataReader, вы можете создать декоратор и передать его в ExtractValue, Затем вы можете перехватить строку даты и изменить формат, прежде чем она будет передана в библиотеку, например

public class DateFormattingDataReader : IDataReader
{
    private readonly IDataReader inner;

    public DateFormattingDataReader(IDataReader inner)
    {
        this.inner = inner;
    }

    public string GetString(int index)
    {
        string s = this.inner.GetString(index);
        if(index == problematicColumnIndex)
        {
            //try to parse string and then format it for the library
        }
        else return s;
    }
}

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

Другие вопросы по тегам