如何在C#中调用基于字符串值的函数

时间:2011-09-28 04:50:13

标签: c# reflection

我想根据其他字符串

的值将字符串转换为特定类型

假设我有两个字符串str1, str2

如果str2double,那么我想调用convert.ToDouble(str1)并返回Double值。有没有办法实现这个目标?

我尝试使用reflections(使用methodInfo对象来调用)

但它仍会再次返回我需要转换的object

请帮助..

4 个答案:

答案 0 :(得分:3)

使用double.TryParse Method

该方法尝试将字符串转换为double,如果失败,则返回false。

如果我理解正确,这就是你想要的:

private static double ConditionalConvertToDouble(string str1, string str2) {
    double converted;
    if (double.TryParse(str2, out converted)) {
        // str2 can be converted to a double, so return str1 converted to a double.
        return Convert.ToDouble(str1);
    } else {
        // I'm throwing an exception here if str1 cannot be converted to a double; you 
        // might want to do something different.
        throw new ArgumentException("str1 cannot be converted to a double");
    }
}

调用这样的方法:

var d = ConditionalConvertToDouble("11", "22");

答案 1 :(得分:1)

double result;
Double.TryParse(str1, out result);

如果str1是double,则result将有其值,否则result将为0.它不会抛出任何异常。

希望它有所帮助。

答案 2 :(得分:1)

当且仅当“str2”也表示double时,以下方法将尝试从“str1”获取double值。如果其中任何一个数字不是双精度数,它将返回double.NaN。

此方法可避免抛出异常,但仍允许您检查是否有有效数字。

public double GetFirstDoubleIfSecond(string str1, string str2)
{
    double myDouble;

    if(double.TryParse(str2, out myVal) && double.TryParse(str1, out myVal))
    {
        return myDouble
    }

    return double.NaN;
}

如果您希望字符串中包含NaN值,则可以使用以下方法,如果其中一个字符串不是双精度数,则会抛出异常。否则,它将返回“str1”中表示的字符串值。

public double GetFirstDoubleIfSecondWithExceptions(string str1, string str2)
{
    double.Parse(str2);

    return double.Parse(str1);
}

答案 3 :(得分:-2)

我认为switch-case运营商应该对你有所帮助。您应该根据您的输入字符串指定一些情况并做出正确的决定。如果你真的不知道哪种类型会返回你的方法,你的方法应该返回对象

public object MyMethod(string str1, string str2)
{
    switch(something)
    {
            case 1:
            case 2:
                return double.Parse(str1);
            break;
            case 3:
            case 4:
                return int.Parse(str1);
            break;
            default
                return null;
    }
}

其中某些内容是您应该指定的标准。

之后System.Object.GetType()方法可以帮助您解决方法返回的类型。