多种类型

时间:2017-06-23 16:28:32

标签: c#

我试图避免在我的代码的一个区域中编写大量的switch / case(或if / else)语句。 采取以下方法:

async internal static Task UndeleteAsync(JObject item, string tableName)
{
    switch (tableName)
    {
        case "QuoteTask":
               var obj = item.ToObject<QuoteTask>();
               var deletedObj = (await MobileService.GetTable<QuoteTask>().IncludeDeleted().Where(x => x.Id == obj.Id).ToListAsync()).FirstOrDefault();
               await MobileService.GetTable<QuoteTask>().UndeleteAsync(deletedObj);                        
        break;
               //Only 26 more tables to go...                
    }        
}

这很好用,但是我有很多桌子,我不太熟悉泛型,但我想也许这样的东西会起作用:

async internal static Task UndeleteAsync<T>(JObject item)
{            
    var obj = item.ToObject<T>();
    var deletedObj = (await MobileService.GetTable<T>().IncludeDeleted().Where(x => (x as BaseObject).Id == (obj as BaseObject).Id).ToListAsync()).FirstOrDefault();
    await MobileService.GetTable<T>().UndeleteAsync(deletedObj);
}

这似乎没问题,它没有给我任何编译器错误,但我的问题是我似乎无法称之为:

Type tableType = Type.GetType(operation.Table.TableName);
await AzureMobileServices.UndeleteAsync<tableType>(operation.Item);

我收到错误&#34; tableType&#34;是一个变量但是像“&#39;类型”一样使用。

所以我想在编译时必须识别泛型。所以我必须有一个庞大的开关/ case或if / else语句来计算出类型。

有人可以指导我以优雅的方式做到这一点吗? 或者没有办法绕过它?

0 个答案:

没有答案