不明确的方法名称:相同的方法名称和参数不同的返回值

时间:2013-09-06 04:39:11

标签: c# overloading

我收到了编译错误

  

以下方法或属性之间的调用不明确   getXmlNodeValue。

我有3个方法都具有相同的名称和参数,但这3个方法确实有3种不同的返回类型(doubleintstring)。是否有可能有3个方法具有相同的名称和参数但返回类型不同?

如果没有,您建议我使用哪种方法?即,只需将方法名称更改为getXmlNodeTextgetXmlNodeDouble等等或其他内容?

private static string getXmlNodeText(XmlNode node, string xPath, XmlNamespaceManager nsmgr)
{
    try
    {
        return node.SelectSingleNode(xPath, nsmgr).InnerText;
    }
    catch (Exception e)
    {
        return string.Empty;
    }
}

public static string getXmlNodeValue(XmlNode node, string xPath, XmlNamespaceManager nsmgr)
{
    return getXmlNodeText(node, xPath, nsmgr);
}

public static double getXmlNodeValue(XmlNode node, string xPath, XmlNamespaceManager nsmgr)
{
    return Convert.ToDouble(getXmlNodeText(node, xPath, nsmgr));
}

public static int getXmlNodeValue(XmlNode node, string xPath, XmlNamespaceManager nsmgr)
{
    return Convert.ToInt32(getXmlNodeText(node, xPath, nsmgr));
}

// Usage problem:
string name = getXmlNodeValue(pitNode, "ns:name", nsmgr);

2 个答案:

答案 0 :(得分:1)

不,不同的返回类型不构成过载。最好使用包含返回类型名称的约定重命名方法。

另一种方法是使用泛型来使键入变得灵活。 更多信息http://msdn.microsoft.com/en-us/library/ms379564(v=vs.80).aspx

答案 1 :(得分:0)

使用如下所示的泛型来获得所需的类型值。

    static void Main(string[] args)
    {
        int value1 = GetValue<Int16>("23");
        double value2 = GetValue<double>("23.34");
    }
    public static T GetValue<T>(string value)
    {
        return (T)Convert.ChangeType(value, typeof(T));
    }