如何为方法返回double或string

时间:2011-07-21 12:57:07

标签: c# generics

我有一个方法:

public static double c(string val)
{
    return Math.Round(Convert.ToDouble(val), 4);
}

我传入一个字符串,如果它是一个double,我想要舍入然后返回一个double,但是如果它是一个字符串,我想按原样返回一个字符串。我传入的所有参数都将是要开始的字符串,如何确定它是字符串还是双精度,以及如何重写方法以使返回类型足够灵活返回?

理想情况下,我想在vba中使用类型变体,但我不认为c#中存在模拟。

4 个答案:

答案 0 :(得分:4)

以下内容将尝试解析double。如果返回true,它会将double放在输出变量output中;否则返回false表示val不是双倍的,您应该使用string val代替。

public static bool c(string val, out double output)
{
    if (double.TryParse(val, out output))
    {
        output = Math.Round(output, 4);
        return true;
    }
    else
    {
        output = 0;
        return false;
    }
}

像这样使用:

string val = "123.45678";
double output;
if ( c(val, out output) )
{
    // use double output
}
else
{
    // val isn't a double, just use val directly
}

答案 1 :(得分:1)

您可以使用typeof()并将功能参数设置为object。然后,您可以将所有内容传递给函数,并可以使用typeof()检查类型。

答案 2 :(得分:1)

不确定为什么要做这样的事情,但动态类型怎么样......

    public dynamic func(string s)
    {
        double d = 0;
        if (double.TryParse(s, out d))
            return Math.Round(d, 4);
        return s;
    }

答案 3 :(得分:0)

在.Net 4中,您可以使用

public static string c(string val)
    {
        Double result;
        if (Double.TryParse(val, out result))
            return Math.Round(result, 4).ToString();
        else
            return val;
    }

如果您不使用.Net 4

public static string c(string val)
    {
        try
        {
            Double result = Convert.ToDouble(val);
            return Math.Round(result, 4).ToString();
        }
        catch
        {
            return val;
        }
    }