Преобразовать в тип данных в формате строки - PullRequest
3 голосов
/ 01 сентября 2011

Я уже давно ищу решение и не могу найти ничего близкого.

Чего я хочу достичь:
У меня есть две строки, 'a' и 'b',Строка 'a' содержит тип данных, например "Boolean".
Строка b содержит значение типа "1" или "False", может быть любым.
Я хочу иметь возможность сохранить значение строки 'b 'в переменной, имеющей тип данных строки' a '.

Если бы я выполнил тестирование через список результатов с такими же значениями, как указано в примере, результаты будут следующими:

Foreach(var value in MyList)
{
  if(!var ConvertTo a) //Result would be negative because for "1" for it is not a boolean value, however if 'a' is "Int32" the result would be true.
    continue;  
  else 
  {//The value "False" is convertable to boolean, so the result would true
    Create a variable with datatype boolean with the value 'false'.
  }
}

Более или менее я нахожусь в поиске какой-то странно взломанной версии TryParse ().

В моем примере я использовал логическое значение, но это может быть любой тип данных.По крайней мере, я должен иметь возможность обрабатывать по крайней мере следующие типы данных:

  • Int, Int32, Int64
  • string
  • Boolean
  • float, decimal
  • DateTime

Мой вопрос:
Можно ли каким-либо образом (попытаться) преобразовать значение в любой тип данных, заданный в строке?

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

Ответы [ 2 ]

7 голосов
/ 01 сентября 2011

Вы должны сопоставить строки с типом.Поскольку не все из них System.<yourType> напрямую, я бы рассмотрел создание отображения:

Dictionary<string, Type> types = new Dictionary<string, Type>();
types.Add("int", typeof(System.Int32);
//etc.

Затем используйте Convert.ChangeType, чтобы получить ваш объект:

object myObj = Convert.ChangeType(b, types[a]);

Возможно, вы могли бырасширить это, пытаясь получить тип, если ключ не существует в вашем отображении типа:

object myObj = Convert.ChangeType(b, Type.GetType("System." + a));
4 голосов
/ 01 сентября 2011

в общем, если вы знаете имя типа, вы можете сделать это:

Type type = Type.GetType("System.Data.OleDb.OleDbParameter");

например, так что вы все равно должны знать полное имя типа.

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

если в качестве строки указано «True», вы не сможете различить, должно ли это быть bool или строка.

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