1

私は次のようなクローズドソースのサードパーティライブラリを使用しています。

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を使用してライブラリの機能を複製することはできますが、それは避けたいと思います。)

これを行う方法はありますか?ありがとう。

4

1 に答える 1

0

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;
    }
}

または、リーダーから読み取ったすべての値を記録してから、最後に読み取った項目として失敗したデータを取得し、それを自分で解析してみることができます。

于 2010-12-09T18:52:18.613 に答える