2014-07-14 78 views
1

對於XPathNavigator支持的每種類型,我都使用了ValueAs方法。使用單一方法返回不同類型的數據

public string GetFromNodeAsString(string xpathOfNode) 
{ 
    XPathNavigator nodeNav = ipFormNav.SelectSingleNode(xpathOfNode, nsManager); 
    return nodeNav.Value; 
} 

public int GetFromNodeAsInt(string xpathOfNode) 
{ 
    XPathNavigator nodeNav = ipFormNav.SelectSingleNode(xpathOfNode, nsManager); 
    return nodeNav.ValueAsInt; 
} 

public DateTime GetFromNodeAsDateTime(string xpathOfNode) 
{ 
    XPathNavigator nodeNav = ipFormNav.SelectSingleNode(xpathOfNode, nsManager); 
    return nodeNav.ValueAsDateTime; 
} 

改變的兩件事是返回類型和返回的內容。 組合這些方法的最佳方法是什麼?有沒有更好的辦法?我已經嘗試過使用動態返回類型並傳遞相應的數據類型,但它並未組合在一起。

+0

請保存這些數據類型的類並將其傳遞迴.... –

回答

5

也許這樣的事情?

public T GetFromNode<T>(string xpathOfNode) 
{ 
    XPathNavigator nodeNav = ipFormNav.SelectSingleNode(xpathOfNode, nsManager); 
    return (T)nodeNav.ValueAs(typeof(T)); 
} 
+0

啊,正是我要建議。 @kKode,這是[generic method](http://www.dotnetperls.com/generic-method)。 – Aaron

+0

不錯。我正在尋找一種重載泛型的方法('GetFromNode ','GetFromNode '和'GetFromNode '等等),但無法讓它工作......猜我最近做了太多的C++ :( – CompuChip

+0

該方法的類型參數不能從用法中推斷出來,我理解這個問題,但是無法理解。 – kKode

-1

我會創建一個結構,稱爲NODEDATA

,然後使用方法:

public NodeData GetFromNodeAsString(string xpathOfNode) 
{ 
    XPathNavigator nodeNav = ipFormNav.SelectSingleNode(xpathOfNode, nsManager); 
    return new NodeData(nodeNav.Value, nodeNav.ValueAsInt, nodeNav.ValueAsDateTime); 
} 
+0

如果該值無法轉換爲任何類型,則爲例外。 –

相關問題