我遇到了一個問題,試圖遞歸地使用泛型函數進行反序列化算法。我正在從XElement的變量中加載它們的值。但是,如果它們不是原始的,我必須遞歸地在該對象上執行相同的操作。但是,該對象與當前正在處理的對象不是同一類型。因此,例如,如果我有調用通用方法時動態設置<T>
class someObject
{
otherObject obj = new otherObject();
}
class otherObject
{
int someInt = 123;
}
解串器遞歸地進入另一個對象。然而,問題是我必須動態地改變泛型方法的類型(即,我不知道在編譯時它將會是什麼類型)。該算法如下:
public static T deserialize<T>(XNode element)
where T : new()
{
XElement currentNode = (XElement)element;
FieldInfo[] fields = getFields<T>();
T returnValue = new T();
foreach (FieldInfo field in fields)
{
if (field.FieldType.IsPrimitive)
{
field.SetValue(returnValue, currentNode.Element(field.Name).Value);
}
else
{
//The issue is on the following line
field.SetValue(returnValue, deserialize<???>(currentNode.Element(field.Name).Value));
}
}
}
我已經看到了大量的文檔如何動態地創建類型的列表和對象。但是,我無法找到任何涉及在泛型方法調用中動態切換類型的內容。
任何幫助,非常感謝!讓我知道如果我不清楚...
模板是C++。這些是泛型。 –
謝謝:)編輯標題。 –
所以如果你不知道在編譯時會發生什麼,你的例程在運行時怎麼知道?您的XElement是否具有存儲爲值的類型標誌的屬性? –