Получить аргумент 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;
}
}
В качестве альтернативы вы можете записать все значения, прочитанные из считывателя, затем вы можете получить ошибочные данные как последний прочитанный элемент и попытаться проанализировать их самостоятельно.