【问题标题】:How to convert string to any type如何将字符串转换为任何类型
【发布时间】:2010-05-27 16:18:29
【问题描述】:

我想将字符串转换为泛型类型

我有这个:

string inputValue = myTxtBox.Text;    

PropertyInfo propInfo = typeof(MyClass).GetProperty(myPropertyName);
Type propType = propInfo.PropertyType;

object propValue = ?????

我想将 'inputString' 转换为该属性的类型,以检查它是否兼容 我该怎么做?

tks

【问题讨论】:

    标签: c# generics reflection


    【解决方案1】:
    using System.ComponentModel;
    
    TypeConverter typeConverter = TypeDescriptor.GetConverter(propType);
    object propValue = typeConverter.ConvertFromString(inputValue);
    

    【讨论】:

    • 我很惊讶与Convert.ChangeType相比,这个获得了赞成票。
    • 可能是因为ChangeType 尝试转换,而不是转换。例如,ChangeType 不能从 String 变为 Nullable<Int64> - TypeConverter 可以。
    • 也不能处理枚举的自动解析
    • Convert.ChangeType 对于字符串也失败 -> Guid
    【解决方案2】:

    试试Convert.ChangeType

    object propvalue = Convert.ChangeType(inputValue, propType);
    

    【讨论】:

    • 这真的是评论,而不是问题的答案。请使用“添加评论”为作者留下反馈。
    • @SteveGuidi:默认同时已经编辑了答案,tnx 到两者。
    • @SWeko 这是通过评论页面进行编辑时的默认回复(我们俩都遇到过这个问题)。我只是编辑了它。
    • 这确实是正确的做法。
    • 我知道还有另一个接受答案,但想澄清为什么不是这样:无法使用 Convert.ChangeType() 将字符串转换为不是内置值类型的另一种类型。这将在 String 类型上使用 IConvertible.ToType(),其实现为调用内部方法 Convert.DefaultToType(),如果要转换为的类型不是内置值类型,则会引发异常。 (referencesource.microsoft.com/#mscorlib/system/…)
    【解决方案3】:

    我真的不认为我理解你想要归档的内容,但是.. 你的意思是动态投射?像这样的:

     TypeDescriptor.GetConverter(typeof(String)).ConvertTo(myObject, typeof(Program));
    

    干杯。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-09-19
      • 1970-01-01
      • 2022-08-18
      • 1970-01-01
      • 2019-09-10
      • 1970-01-01
      • 2019-01-21
      • 2016-12-30
      相关资源
      最近更新 更多