2013-05-30 11 views
9

Recentemente sono entrato in C#/Azure e ho un piccolo problema che mi piacerebbe risolvere. L'applicazione funziona come previsto, ma mi piacerebbe refactoring un sacco di classi perché sono sicuro che c'è una soluzione più semplice.Trasmissione del risultato di TableOperation.Retrieve

Al momento ho un sacco di funzioni per recuperare organismi dei Azure che variano solo per il tipo che viene recuperata, ma in modo ottimale vorrei una sola classe in questo modo:

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

Questo, di per sé , lavora e recupera le entità richieste. Tuttavia, non posso lanciare l'oggetto restituito senza un errore.

Il tipo di oggetto che voglio trasmettere per implementare TableEntity-Type e corrisponde al risultato fuori dalla tabella.

So che posso gettarlo nel senso di

TableOperation.Retrieve<Type>(...) 

ma mi piacerebbe davvero utilizzare una singola funzione per questo scopo, che mi obbliga a gettarlo a chiamare la funzione.

Ho il sospetto che il problema sia legato al fatto che il risultato sia di tipo DynamicTableEntity ma sono piuttosto perso dal motivo.

C'è un modo per risolvere elegantemente questo problema/c'è un modo per stabilire un parametro che contenga il Tipo che voglio come risultato? (L'ho provato con "Type ..." ma non funziona).

+3

avete fatto prova ad usare un tipo generico? Come in: public static T Do (...) { ... TableOperation.Retrieve (...) } –

+0

Questa API è ridicola. – Rookian

risposta

-4

È possibile utilizzare le funzioni con tipi generici in C#

consultare this link

Si può anche fare riferimento all'esempio StackOverflow here

0

Si potrebbe provare qualcosa di simile:

return (Entity)retrievedResult.Result; 

class Entity : TableEntity 
{ 
    public string PartKey => PartitionKey; 
    public string RowKey => RowKey; 
}