Получить аргумент FormatException - PullRequest
1 голос
/ 09 декабря 2010

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

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 Ответ

0 голосов
/ 09 декабря 2010

Поскольку 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;
    }
}

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

...