我试图避免在我的代码的一个区域中编写大量的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语句来计算出类型。
有人可以指导我以优雅的方式做到这一点吗? 或者没有办法绕过它?