Как вызвать функцию на основе строкового значения в C # - PullRequest
0 голосов
/ 28 сентября 2011

Я хочу преобразовать строку в определенный тип на основе значения другой строки

Предположим, у меня есть две строки str1, str2.

Если str2 равно double, тогда я хочу позвонить convert.ToDouble(str1) и вернуть значение Double. Есть ли способ сделать это?

Я пытался использовать reflections (используя для вызова methodInfo объект)

Но все равно он снова возвращает object, для которого мне нужно конвертировать.

Пожалуйста, помогите ..

Ответы [ 4 ]

3 голосов
/ 28 сентября 2011

Используйте метод double.TryParse .

Метод пытается преобразовать строку в значение типа 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 голос
/ 28 сентября 2011

Следующий метод попытается получить двойное значение из «str1» тогда и только тогда, когда «str2» также представляет двойное значение.Если любое из чисел не является двойным, оно возвращает 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);
}
1 голос
/ 28 сентября 2011
double result;
Double.TryParse(str1, out result);

если str1 равно double, результат будет иметь свое значение, в противном случае результат будет иметь 0. Он не будет выдавать никаких исключений.

Надеюсь, это поможет.

0 голосов
/ 28 сентября 2011

Я думаю, что оператор коммутатора должен помочь вам. Вы должны указать несколько случаев в зависимости от одной из ваших входных строк и принять правильное решение. Ваш метод должен вернуть object , если вы действительно не знаете, какой именно тип вернет ваш метод.

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() может помочь вам определить, какой тип был возвращен вашим методом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...