簡體   English   中英

具有不確定數量的泛型類型參數的方法

[英]A method with an unspecified number of Generic Type parameters

有沒有一種方法可以使用方法中未指定數量的泛型類型參數?

實際上,除了明顯的問題外,我想做的是這樣的事情:

    private static void FetchChunk(int retries, KeyValuePair<List<dynamic>,Type>[] fetchfields)
    {
        try
        {
            foreach (var chunk in fetchfields)
            {
                var obj = chunk.Key;
                obj = DBRepository.GetAll<chunk.Value>().ToList();
            }
        }
        catch
        {
            //do stuff
        }

    }

但是,這失敗了,因為我需要使用通用類型參數(例如T)代替類型,

但是問題是,我不知道如何以這種方式使用泛型來實現我要實現的目標。 因為我想要數組中每個KeyValuePair的唯一通用類型參數。

另一方面,這絕對可以編譯,但是並不能滿足我的預期,因為每個KeyValue對都具有自己的唯一Generic Type參數。

    private static void FetchChunk<T>(int retries, KeyValuePair<List<dynamic>, T>[] fetchfields)
    {
        try
        {
            foreach (var chunk in fetchfields)
            {
                var obj = chunk.Key;
                obj = DBRepository.GetAll<T>().ToList();
            }
        }
        catch
        {
            //do stuff
        }

GetAll的方法簽名為

 public static IEnumerable<dynamic> GetAll(Type type, string columnNames = "*")

這也不起作用:

                var type = chunk.Value.GenericTypeArguments[0];
                obj = DBRepository.GetAll<type>().ToList();

有沒有一種方法可以重新編碼此方法以實現我的意圖?

如果可以在包裝方法中使用反射,則如以下答案中所述,您應該能夠使用MakeGenericMethod構造通用方法的實例,然后使用不同的類型集進行調用。

代碼已更新,以匹配@AlexanderRyanBaggett的最新評論

private static void FetchChunk(int retries, KeyValuePair<List<dynamic>, Type>[] fetchfields)
{
    try
    {
        foreach (var chunk in fetchfields)
        {
            var method = typeof(DBRepository).GetMethod("GetAll");
            var Generic = method.MakeGenericMethod(chunk.Value);
            chunk.Key.AddRange(Generic.Invoke(null, null) as IEnumerable<dynamic>);
        }
    }
    catch
    {
        //do stuff } }
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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