2013-05-30 16 views
9

Niedawno dostałem się do C#/Azure i mam mały problem, który chciałbym wypracować. Aplikacja działa zgodnie z przeznaczeniem, ale chciałbym refakturować kilka klas, ponieważ jestem pewien, że istnieje prostsze rozwiązanie.Rzucanie wyniku TableOperation.Retrieve

Obecnie ma kilka funkcji do pobierania podmiotów z Azure że tylko różnią się typem, który zostanie odtworzony, ale optymalnie chciałbym tylko jedna klasa tak:

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

To samo w sobie , działa i pobiera wymagane obiekty. Nie mogę jednak rzucić zwróconego obiektu bez błędu.

Obiekt Typ, który chcę obsłużyć, implementuje typ TableEntity i dopasowuje wynik z tabeli.

wiem, że mogę rzucić go w sensie

TableOperation.Retrieve<Type>(...) 

ale naprawdę chciałbym użyć jedną funkcję dla tego celu, który wymaga ode mnie rzucić go na wywołanie funkcji.

Podejrzewam, że problem jest związany z faktem, że wynik jest typu DynamicTableEntity, ale jestem dość zagubiony, dlaczego.

Czy istnieje sposób na rozwiązanie tego problemu w sposób elegancki/czy istnieje sposób na ustanowienie parametru, który zawiera pożądany typ? (Próbowałem go z "Type ...", ale to nie działa).

+3

skończyłeś spróbuj użyć typu ogólnego? Tak jak w: public static T Do (...) { ... TableOperation.Retrieve (...) } –

+0

Ten interfejs API jest niedorzeczny. – Rookian

Odpowiedz

-4

Można użyć funkcji z głównych rodzajów w języku C#

Patrz this link

Można również przekazać StackOverflow Przykład here

0

można spróbować coś takiego:

return (Entity)retrievedResult.Result; 

class Entity : TableEntity 
{ 
    public string PartKey => PartitionKey; 
    public string RowKey => RowKey; 
} 
Powiązane problemy