簡體   English   中英

從反射fieldInfo獲取實際類型

[英]Getting the actual type from reflection fieldInfo

我正在圍繞軟件的GUI API編寫一個通用包裝器,該包裝器能夠處理許多自己的“內置”類型,但我不知道如何獲得所需的內容。 例如,我這樣做是為了處理字符串:

(“ MakeTextField”和“ MakeField”是偽代碼,它們采用一個值,顯示一個GUI元素,然后從GUI返回該值以進行存儲)

public static void FieldInfoMakeField<T>(T instance, System.Reflection.FieldInfo fieldInfo)
{
    string label = fieldInfo.Name;

    if (fieldInfo.FieldType == typeof(string))
    {
        var val = (string)fieldInfo.GetValue(instance);
        val = MakeTextField(label, val);
        fieldInfo.SetValue(instance, val);
        return;
    }
    //else if ... more types

這是我對於API的類型所擁有的,其中A和B是從通用類型派生的,我也可以對其進行測試,但是我需要派生類型:

...
else if (fieldInfo.FieldType == typeof(APITypeA))
{
    var val = (APITypeA)fieldInfo.GetValue(instance);
    val = MakeField<APITypeA>(label, val);  // My version, casts internally
    fieldInfo.SetValue(APITypeA, val);
    return;
}
else if (fieldInfo.FieldType == typeof(APITypeB))
{
    var val = (APITypeB)fieldInfo.GetValue(instance);
    val = MakeField<APITypeB>(label, val);  // My version, casts internally
    fieldInfo.SetValue(APITypeB, val);
    return;
}
...

所有這些都可以,但是我還有大約10個用於其他“ APIType”的復制和粘貼代碼塊。 如果我不是一般性地執行此操作,則只需傳入從API基本類型派生的任何類型,它就可以工作,但我不知道如何獲取fieldInfo的實際類型。 如果我打印它,它將打印派生類型的名稱,但是我似乎無法將它們弄清楚。

我希望我能很好地說明我的問題。 這是高度情況,但似乎應該可行。 如果我能得到FieldType()打印的類型,那我將是黃金。 否則,我將在#region中充滿其他if語句,這肯定不是我想要的通用!

您是否可以將字段的Type提供給FieldInfoMakeField函數?

public static void FieldInfoMakeField<T, V>(T instance, FieldInfo fieldInfo)
{
    string label = fieldInfo.Name;

    var val = (V)fieldInfo.GetValue(instance);
    val = MakeField<V>(label, val);
    fieldInfo.SetValue(instance, val);
    return;
}

暫無
暫無

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

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