![](/img/trans.png)
[英]return generic IEnumerable when passing concrete type parameter for a generic method
[英]Pass concrete object type as parameter for generic method
我有一個使用通用方法的API如下
public static class DataProvider
{
public static Boolean DeleteDataObject<T>(Guid uid, IDbConnection dbConnection)
{
// Do something here
}
public static IDbConnection GetConnection()
{
// Get connection
}
}
我的應用程序包含在運行時使用CodeDOM生成的類,為了跟蹤我創建了一個名為IDataObject
的接口。 我試圖將每個對象的具體類型傳遞給上面的泛型方法,如下所示:
public static Boolean PurgeDataObject(this IDataObject dataObject, Guid uid)
{
return DataProvider.DeleteDataObject<T>(uid, DataProvider.GetConnection());
}
dataObject
包含從IDataObject
繼承的類的實例。 我有興趣獲得該類型並將其作為T
傳遞。 我試圖找出是否有可能在某種程度上使用dynamic
這里。 typeof()
和GetType()
不能像Here中所述那樣工作
我懷疑你想要這樣的東西:
public static Boolean PurgeDataObject(this IDataObject dataObject, Guid uid)
{
return PurgeDataObjectImpl((dynamic) dataObject, uid);
}
private static Boolean PurgeDataObjectImpl<T>(T dataObject, Guid uid)
where T : IDataObject
{
return DataProvider.DeleteDataObject<T>(uid, DataProvider.GetConnection());
}
它動態地使用dataObject
,讓“執行時編譯器”執行類型推斷以計算出T
你可以使用反射來自己使用MethodInfo.MakeGenericMethod
來做到這一點 - 但這種方式肯定是更少的代碼。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.