Подтвердить что ты не робот

Есть ли общая функция Parse(), которая преобразует строку в любой тип, используя синтаксический анализ?

Я хочу преобразовать строку в общий тип типа int или date или long на основе типичного типа возврата.

В основном функция типа Parse<T>(String), которая возвращает элемент типа T.

Например, если int был передан, функция должна делать int.parse внутренне.

4b9b3361

Ответ 1

System.Convert.ChangeType

В соответствии с вашим примером вы можете сделать:

int i = (int)Convert.ChangeType("123", typeof(int));
DateTime dt = (DateTime)Convert.ChangeType("2009/12/12", typeof(DateTime));

Чтобы удовлетворить требование "общий тип возвращаемого типа", вы можете написать свой собственный метод расширения:

public static T ChangeType<T>(this object obj)
{
    return (T)Convert.ChangeType(obj, typeof(T));
}

Это позволит вам сделать:

int i = "123".ChangeType<int>();

Ответ 2

System.Convert.ChangeType не конвертируется в любой тип. Подумайте о следующем:

  • типы с нулевым значением
  • перечислений
  • Руководство и т.д.

Эти преобразования возможны с этой реализацией ChangeType.

Ответ 3

Существует несколько соглашений в .NET для преобразования объектов одного типа в другой.

Но эти методы намного медленнее, чем ваш типичный T.Parse(string), вызывают бокс и задействуют множество распределений каждый раз, когда вы хотите преобразовать одно значение.

Для ValueString я решил найти подходящий статический метод синтаксического анализа типа с использованием отражения, построить выражение лямбда, вызывающее его и кеш скомпилированный делегат для будущего использования (см. этот ответ для примера).

Он также отступает от способов, о которых я говорил выше, если тип не имеет подходящего метода синтаксического анализа (см. раздел производительности в ридй).

var v = new ValueString("15"); // struct
var i = v.As<int>(); // Calls int.Parse.

Ответ 4

Простой способ анализа строк. Все переменные типа номера имеют встроенную функцию синтаксического анализа.

Пример:

Если это ваша проблема.

Console.Write("enter meal price");
double mealprice = Console.Readline(); 

тогда это ваш ответ.

Console.Write("enter meal price");
double mealprice =double.Parse( Console.Readline()); 

также работает с int, а другие также...