如何将类型为string的对象动态转换为类型为T的对象

时间:2009-09-23 13:03:26

标签: c# generics casting

我有这个XML文档

<AdditionalParameters>
<PublishToPdf Type ="System.Boolean">False</PublishToPdf>
</AdditionalParameters>

在我的代码中,我正在尝试构建一个包含<PublishToPdf>节点的参数数组。

object test = (object) ((typeof(publishNode.Attributes["Type"].value)) publishNode.InnerText);

当然,这在编译时会中断。我无法弄清楚如何将publishNode.InnerText('false')强制转换为XML文件中指定类型的运行时定义对象,并将其存储在一个对象中(这将保留该类型)。

3 个答案:

答案 0 :(得分:21)

您可以使用Convert.ChangeType

object value = Convert.ChangeType(stringValue, destinationType);

答案 1 :(得分:2)

你无法完全按照自己的意愿去做。首先,typeof关键字不允许在运行时进行动态评估。有一些方法可以使用反射来执行此操作,使用Type.GetType(string)等方法,但从这些反射函数返回的Type对象不能用于像转换这样的操作。

您需要做的是提供一种将类型转换为字符串表示形式的方法。任何类型都没有自动转换。对于您的示例,您可以使用bool.Parsebool.TryParse,但这些特定于bool类型。大多数原始类型都有类似的方法。

答案 2 :(得分:1)

简单的解决方案,假设可能的类型数量有限;

object GetValueObject(string type, string value)
{
  switch (type)
  {
    case "System.Boolean":
      return Boolean.Parse(value);
    case "System.Int32":
      return Int32.Parse(value);
    ...
    default:
      return value;
  }
}  

var type = publishNode.Attributes["Type"].value;
var value = publishNode.InnerText;
var valueObject = GetValueObject(type, value);