Динамический тип возврата на основе ввода - asp.net - PullRequest
2 голосов
/ 14 февраля 2011

Я хочу создать функцию, которая будет иметь два параметра

public **XYZ** GetOputput(string strToConvert, **ABC**)

Что я хочу от этой функции, чтобы я отправил ей строку и тип данных, в который я хочу преобразовать эту строку [Ex: Int32, Int64, datetime и т. Д.], И результат будет таким же, как тип данных, который я отправил в качестве входного параметра.

Я хочу, чтобы в моей функции было что-то подобное:

 switch(//what is the data type)

                case: //if data type is date than do something and return date
                case: //if data type is int than do something and return int 

Я понятия не имею, как динамически отправлять, сравнивать и возвращать тип данных. Помоги мне

Ответы [ 5 ]

5 голосов
/ 14 февраля 2011

Как насчет использования универсальной функции.

  public T GetValue<T>(string value)
  {
     return (T)Convert.ChangeType(value, typeof(T), CultureInfo.InvariantCulture);
  }

Итак, чтобы получить int из строки, попробуйте это:

int x = GetValue<int>("1234");
3 голосов
/ 14 февраля 2011

Вы можете использовать это для своей функции (принимает во внимание обнуляемые типы):

public T GetValue<T>(string value)
    {
        return (T)Convert.ChangeType(value, Nullable.GetUnderlyingType(typeof(T)) ?? typeof(T));
    }
1 голос
/ 14 февраля 2011

Взгляните на Convert.ChangeType

1 голос
/ 14 февраля 2011

Похоже, вы хотите использовать Generics:

public T GetOutput<T>(string input)
{
//DoStuff
}

И используется:

var int = GetOutput<int>("10");

Хотя проверка типа T для всех принятых типов может быть немного утомительной.

edit: соедините его с ответом Мики и сделайте:

public T GetOutput<T>(string input)
{
    return (T)Convert.ChangeType(input, typeof(T));
}
1 голос
/ 14 февраля 2011

используйте dynamic, если вы используете .NET Framework 4.0

...