簡體   English   中英

將泛型對象轉換為強類型 T

[英]Converting a generic object to a strongly typed T

我正在嘗試編寫一個方法,該方法將采用通用object並將其轉換為T類型。 上下文是,我剛剛進行了 REST API 調用,並且我在value中有響應的內容。 在這種情況下,我碰巧知道返回類型是一個字符串數組。

在此處輸入圖片說明

但當然,情況並非總是如此。

using (var response = await client.SendAsync(request))
{
    HttpContent result = response.Content;
    object value = ((ObjectContent)result).Value;

    List<string> list = GenericToStronglyTyped<List<string>>(value);
    List<string> list2 = GenericToStronglyTyped_v2<List<string>>(value);
}

我在這里發現了一個看起來很積極的類似問題: Cast object to T

我嘗試了如下建議的答案:

private T GenericToStronglyTyped<T>(object obj)
{
    if (obj is T)
    {
        return (T)obj;
    }
    try
    {
        return (T)Convert.ChangeType(obj, typeof(T));
    }
    catch (InvalidCastException)
    {
        return default(T);
    }
}

但是,由於以下原因,這將返回null

對象必須實現 IConvertible。

所以我想出了我自己的解決方案:

private T GenericToStronglyTyped_v2<T>(object obj)
{            
    try
    {
        string json = JsonConvert.SerializeObject(obj);
        return JsonConvert.DeserializeObject<T>(json);
    }
    catch (InvalidCastException)
    {
        return default(T);
    }
}

這確實有效,但感覺有點像噱頭。 解決這個問題的最佳方法是什么?

謝謝!

這確實有效,但感覺有點像噱頭。 解決這個問題的最佳方法是什么?

我覺得你在這里冒險發表意見,但是,這是我的:你提出的花哨的解決方案既經過充分測試,又非常容易閱讀。 我會整天帶着這些。

如果在某些時候序列化的開銷太大,那么回來仔細看看。 但尤其是在分流字符串數據時,需要考慮的邊緣情況太多了。 這是一個已解決的問題,因此我建議您欣賞這些庫的存在並繼續處理您的實際業務邏輯。

暫無
暫無

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

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