转换为以字符串格式指定的数据类型

时间:2011-09-01 07:00:40

标签: c# type-conversion

我一直在寻找解决方案已经有一段时间了,找不到任何接近的东西。

我想要达到的目标:
我有两个字符串,'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()。

我在我的例子中使用了boolean,但这可以是任何数据类型。至少我应该能够处理至少以下数据类型:

  • Int,Int32,Int64
  • 字符串
  • 布尔
  • float,decimal
  • 日期时间

我的问题:
是否有可能(尝试)将值转换为字符串中给出的任何数据类型?

我希望我的问题和例子很清楚,如果没有,请发表评论。

3 个答案:

答案 0 :(得分:7)

您必须将字符串映射到某个类型。由于并非所有这些都是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));

答案 1 :(得分:4)

一般来说,如果您知道类型名称,则可以执行此操作:

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

,所以你必须知道该类型的全名。

这样说,如果你有一个从调用者设置的对象到某个值,你可以在对象上做GetType()并得到它的实际类型。

如果“True”以字符串形式出现,则无法区分是否应该是bool或字符串。

答案 2 :(得分:0)

如果要使用Dispatcher数据类型,则不能使用TimeSpan

一种替代方法是使用ChangeType()

TypeConverter.ConvertFrom()

与其他答案一样,它假定您知道要转换为哪种类型。