【发布时间】:2018-03-26 08:37:48
【问题描述】:
我一直在寻找一种更直观的方式在 C# 中的数据类型之间进行转换(比如枚举到字符串),所以我偶然发现了 TypeConverter 类。我已经阅读了有关如何创建一个的文档,它看起来相当简单,只需使用一些自定义转换逻辑覆盖 TypeConverter 中的一些方法并完成。
但是,既然我已经创建了这个转换器,我就无法弄清楚如何实际使用它。我发现的每一个资源都简单地解释了如何创建一个,而我看到实际使用它的唯一参考是用[TypeConverter(typeof(MyConverter))] 装饰我的类型类。问题是我实际上没有类型类,我转换到/从的类型是枚举和字符串,所以我不知道我应该把 TypeConverter 放在哪里。
假设我的类型是自定义类,并且我将装饰放在定义它的类上,那么我将如何转换类型?我只是在任何我想要的地方使用类型作为字符串,转换器会神奇地完成它的工作而不会被询问,还是我需要以某种方式提示它。是否有可以使用类型转换器的范围,还是可以在该类型所在的任何地方访问它?
我有点期待它可以像 System.Convert 一样工作,但事实并非如此。
【问题讨论】:
-
没用过,不过还有一个更具体的类EnumConverter继承自
TypeConverter。 -
@Corak
EnumConverter自动用作所有枚举 IIRC 的默认转换器 -
我猜一个“简单的”
enumValue.ToString()和EnumType enumValue; EnumValue.TryParse("StringValue", out enumValue);不够? -
TypeConverter 为 Visual Studio 中的 PropertyGrid 类和“属性”窗口提供支持。它的主要工作是将类型转换为对人类有意义的字符串。 Winforms 是其最大的客户。它在你自己的代码中也很方便,但你必须了解它的领域。如果类型是您自己的而不是框架中的类型,并且您不使用字符串类型或关心本地化,那么必须编写自己的 TypeConverter 很少会让您领先,它只会成为您不需要的额外复杂层.
-
enumValue.ToString()实际上确实有效,这就是我在这种情况下所需要的。我什至没有想过尝试它,因为我的印象是枚举在运行时只能作为静态整数列表使用。
标签: c# typeconverter