2014-07-14 74 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

如果该值无法转换为任何类型,则为例外。 –

相关问题