簡體   English   中英

C# - 如何將來自兩個通用類型的數據連接在一起

[英]C# - How to join data from two generic types together

是否可以使用例如反射將兩種類型連接在一起(比如列表中的 doing.AddRange )? 類似於此響應https://stackoverflow.com/a/8702650/13112059 ,但此處來自目標 object 的數據被替換。

public class ItemsResponse
{
    public List<Items> Items{ get; set; } = new List<Items>();
}

在我的例子中,我收到了來自 API 的響應,並將數據轉換為這種類型,例如它只在運行時定義,但是我還需要做另一個請求,我從相同類型接收數據並且我想加入這個對象一起返回他們作為一個。

請求示例:

public static async Task<T> Query()
{
    var response = new T();
    var response2 = new T();
    response = (T)await RequestAsync(); // First request
    /// ...
    response2 = (T)await RequestAsync(); // Second request
   // I want to return an object containing data from the two responses
}

謝謝!

通用類型參數,即<T>不是運行時類型。 該類型仍然是靜態已知的,只是不是通過這段特定的代碼。 遲早你必須為你的T提供一個實際類型,這可能是在一些第三方代碼中完成的,但它在編譯時仍然是已知的。 Ofc,它可能在運行時定義,但這在這里並不真正相關。

如果你想創建一個響應列表,你只需要在處理這些類型的任何類或方法中包含泛型類型參數。

public static List<T> MakeRequests<T>(MyRequestObject obj){

    var items = new List<T>();
    items.Add(obj.Query());
    // Do more queries, or whatever else you want
    

    return items;
}

除了將它們放入集合中或將它們轉換為stringobject之外,您不能真正使用查詢返回的對象。 因此,像這樣的通用代碼通常僅限於需要完成的相當簡單的事情,而不管實際類型如何。

Collections 可能包括元組之類的東西,即(T Request1, T Request2) ,但是您不能將兩個 object 組合成同一類型的 object,至少不能沒有大量的反射。

暫無
暫無

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

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