C #: Создание переменной с плавающей точкой на лету - PullRequest
1 голос
/ 08 декабря 2010

У меня есть 2 строки: «3.45» и «float», так что это означает, что мне нужно создать переменную типа float со значением = 3.45. Как это сделать? Я думаю, мне нужно использовать Reflection, но я не могу понять, как назначить переменную float из строки. NB. На самом деле обе строки могут иметь любые значения. Мне нужен универсальный код, который будет работать с любым типом.

Спасибо

Ответы [ 3 ]

3 голосов
/ 08 декабря 2010

Вы взгляните на метод ChangeType :

string s1 = "3.45";
string s2 = "System.Single";
Type targetType = Type.GetType(s2, true);
object result = Convert.ChangeType(s1, targetType);

И еще один:

string s1 = "08/12/2010";
string s2 = "System.DateTime";
Type targetType = Type.GetType(s2, true);
object result = Convert.ChangeType(s1, targetType);

Для обработки специфичных для культуры преобразований, таких как десятичный разделитель, формат даты и времени, есть перегрузка этого метода , который необходимо использовать для передачи поставщика формата:

string s1 = "3,45";
string s2 = "System.Single";
Type targetType = Type.GetType(s2, true);
object result = Convert.ChangeType(s1, targetType, new CultureInfo("fr-FR"));
0 голосов
/ 08 декабря 2010

Зачем вам нужно создавать «переменную» типа float / single?

Я думаю, вы хотите что-то сделать со значением.Подумайте, что вы хотите с ним сделать.

Если вам нужно передать его в другую переменную, вы можете использовать:

object someValue = single.Parse("3.45");

Если вы хотите вызвать метод с помощью отражения с помощью floatв качестве динамического параметра вы можете использовать (кредиты MSDN для большей части примера):

    Type magicType = Type.GetType("MagicClass");
    ConstructorInfo magicConstructor = magicType.GetConstructor(Type.EmptyTypes);
    object magicClassObject = magicConstructor.Invoke(new object[]{});

    // Get the ItsMagic method and invoke with a parameter value of single 3.45

    MethodInfo magicMethod = magicType.GetMethod("ItsMagic");
    object magicValue = magicMethod.Invoke(magicClassObject, new object[]{ single.Parse("3.45")});
0 голосов
/ 08 декабря 2010

Вы можете использовать ChangeType, чтобы выполнить это

        string test = "12.2";
        var sam = Type.GetType("System.Single");    
        var val = Convert.ChangeType(test, sam);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...