【问题标题】:Parsing strings in custom formats using TypeConverter.ConvertFromString()使用 TypeConverter.ConvertFromString() 以自定义格式解析字符串
【发布时间】:2013-04-18 02:01:58
【问题描述】:

使用TypeConverter.ConvertFromString(),我需要在从字符串解析数据时提供自定义格式(例如,使用DateTime"ddMMyyyy""MMMM dd, yyyy")。

TypeConverter.ConvertFromString() 有以下重载:

public object ConvertFromString(ITypeDescriptorContext context, 
                                CultureInfo culture, 
                                string text);

我查看了MSDN 关于ITypeDescriptorContext

ITypeDescriptorContext 接口提供上下文信息 关于一个组件。 ITypeDescriptorContext 通常用于设计 是时候提供有关设计时容器的信息了。这 接口常用于类型转换。

这听起来像是我需要使用的,但我在任何地方都找不到任何示例。

我正在使用以下通用方法:

public T ParseValue<T>(string value)
{
    return (T)TypeDescriptor.GetConverter(typeof(T)).ConvertFromString(value);
}

调用代码示例:

DateTime date = ParseValue<DateTime>("02062001");
decimal amount = ParseValue<decimal>("1.3423");

我希望能够将某种通用格式信息解析到这个ParseValue() 方法中,ConvertFromString() 可以使用它。

【问题讨论】:

  • @Bob- 因为有时我会将字符串解析为其他数据类型(不仅仅是DateTime)。我需要使用TypeDescriptor,这样我才能在运行时获得适当的解析机制。
  • 我很困惑,您想将表示为字符串的 DateTime 转换为其他数据类型?那么喜欢int?
  • @Bob- 我用更多代码示例编辑了我的帖子。谢谢
  • 啊,我明白了,您正在寻找一个通用字符串转换器,将其更改为适当的数据类型,应该真正改变您的标题以反映这一点。 :)
  • 也许this answer 可能会有所帮助。

标签: c# .net parsing datetime type-conversion


【解决方案1】:

您可以创建自定义 CultureInfo ,保存您的格式。

另一种解决方案是在一些辅助方法中包装转换,该方法将 DateTime.Parse 用于日期,将 TypeConverter 用于其他类型。

【讨论】:

  • 我已经考虑过了(我还需要在解析小数、负数等时指定​​数字格式),但是必须创建一个虚拟 CultureInfo 对象并覆盖一些相关属性似乎有点过头了.那么ITypeDescriptorContext 究竟是为了什么?感谢您的回复:)
猜你喜欢
  • 2022-10-16
  • 2022-12-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多