9

私は最近 C# / Azure を始めましたが、解決したい小さな問題があります。アプリケーションは意図したとおりに動作しますが、より簡単な解決策があると確信しているため、一連のクラスをリファクタリングしたいと考えています。

私は現在、Azure からエンティティを取得するための一連の関数を持っていますが、それらは取得されるタイプのみが異なりますが、最適には次のような 1 つのクラスのみが必要です。

public static Object Do(string RowKey, string partitionKey, string tableName)
{
    var theTable = Connect.Initialize(tableName);
    var retrieveOperation = TableOperation.Retrieve(
                                      Base64.EncodeTo64(partitionKey),
                                      Base64.EncodeTo64(RowKey));

    var retrievedResult = theTable.Execute(retrieveOperation);

    if (retrievedResult.Result != null) {
        return retrievedResult.Result;
    }
     throw new ArgumentException(
                 String.Format("{0} not found in the Table", RowKey));
}

これ自体が機能し、必要なエンティティを取得します。ただし、返されたオブジェクトをエラーなしでキャストすることはできません。

キャストしたいオブジェクト タイプは、TableEntity-Type を実装し、テーブルの Result と一致します。

という意味でキャストできることを知っています

TableOperation.Retrieve<Type>(...)

しかし、この目的のために単一の関数を使用したいので、関数の呼び出し時にキャストする必要があります。

この問題は、結果がタイプ DynamicTableEntity であるという事実に関連していると思われますが、その理由についてはかなり迷っています。

この問題をエレガントに解決する方法はありますか/結果として必要なタイプを保持するパラメーターを確立する方法はありますか? (「Type ...」で試してみましたが、うまくいきません)。

4

4 に答える 4

-5

C#でジェネリック型で関数を使用できます

このリンクを参照してください

ここでスタックオーバーフローの例を参照することもできます

于 2014-06-30T10:33:43.883 に答える