【问题标题】:How to convert from string to object of any type?如何从字符串转换为任何类型的对象?
【发布时间】:2009-09-30 13:23:14
【问题描述】:

我需要将包含数据的字符串转换为使用反射传递的某种类型的对象。我有一个不可序列化的对象,其中包含任何类型的属性,我想将数据加载到该对象。

例如,该对象有一个属性Color BgColor。当我尝试将“红色”值设置为该属性时,我得到从字符串到颜色的转换是不可能的。我需要通用代码。

【问题讨论】:

标签: c# .net reflection


【解决方案1】:

尝试Convert.ChangeType 进行一般转换。

但在你的情况下,我认为Color.FromName 方法是最好的:

根据预定义颜色的指定名称创建一个 Color 结构。

【讨论】:

  • 不,不幸的是我知道它,它没有帮助,例如它可以将 120 转换为 System.Web.UI.WebControls.Unit 吗?在 xml 我有一个字符串,宽度属性类型是 Unit
  • 有没有通用的方法?或者我应该使用switch case还是尝试通过反射找到解析方法?
【解决方案2】:

如果您只需将字符串转换为其在enum 中的值,您可以使用类似于以下的代码:

public static T ToEnum<T>(this string original)
{
    Array values = Enum.GetValues(typeof(T));

    foreach (T value in values)
    {
        if (value.ToString().ToUpperInvariant() == original.ToUpperInvariant())
            return value;
    }

    throw new NotFoundException();
}

如果您需要转换其他类型,那么指定字符串的类型和格式可能会帮助人们更好地指导您。

【讨论】:

  • 属性类型并不总是枚举,我从 xml 加载 ASP.NET 控件并希望从 xml 值设置所有控件属性,但是 ASP.NET 以某种方式将 129 px 字符串转换为 UNit 类型,就我而言,我收到一个错误
猜你喜欢
  • 1970-01-01
  • 2019-07-12
  • 1970-01-01
  • 2015-10-29
  • 2019-03-06
  • 1970-01-01
  • 2012-09-02
  • 2018-06-23
  • 1970-01-01
相关资源
最近更新 更多