簡體   English   中英

將具體對象類型作為泛型方法的參數傳遞

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM