来自字符串、整数等的枚举
使用扩展方法,我们可以通过为枚举创建扩展方法 ToInt()
、ToString()
等来创建将枚举转换为其他数据类型(如 string、int)的方法。
我想知道如何以相反的方式实现,例如 FromInt(int)
、FromString(string)
等。据我所知,我无法创建 MyEnum.FromInt()
(静态)扩展方法。那么,有哪些可能的方法呢?
Using extension method we can create methods to convert an enum to other datatype like string, int by creating extension methods ToInt()
, ToString()
, etc for the enum.
I wonder how to implement the other way around, e.g. FromInt(int)
, FromString(string)
, etc. As far as I know I can't create MyEnum.FromInt()
(static) extension method. So what are the possible approaches for this?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(7)
我会避免使用枚举的扩展方法污染 int 或 string,而可能需要一个好的老式静态帮助器类。
I would avoid polluting int or string with extension methods for enums, instead a good old fashioned static helper class might be in order.
您真的需要这些扩展方法吗?
Do you really need those extension methods?
另一种方式可能是...另一种方式;)使用通用扩展方法扩展 int 和 string,它将采用枚举类型作为类型参数:
用法:
不幸的是没有泛型Enums 的约束,所以我们必须在运行时检查 TEnum 类型;为了简化,我们将验证留给
Enum.ToObject
和Enum.Parse
方法。The other way around would be possibly... the other way around ;) Extend int and string with generic extension methods which will take as type parameter the type of an enum:
Usage:
There is unfortunately no generic constraint for Enums, so we have to check TEnum type during runtime; to simplify we'll leave that verification to
Enum.ToObject
andEnum.Parse
methods.为什么你想要 FromInt 一个扩展方法而不是仅仅强制转换它?
或者,对于字符串,您可以使用 Enum.TryParse
why do you want FromInt an extenstion method versus just casting it?
alternatively, for strings, you can use Enum.TryParse
另一种方法(针对问题的字符串部分):(
部分灵感来自:http://devlicious.com/blogs/christopher_bennage/archive/2007/09/13/my-new-little-friend-enum-lt-t- gt.aspx)
Another approach (for the string part of your question):
(Partially inspired by: http://devlicious.com/blogs/christopher_bennage/archive/2007/09/13/my-new-little-friend-enum-lt-t-gt.aspx)
你可以这样做:
或者:
You can do:
Or:
您可以在 int 和 string 上创建扩展方法。
或者在其他静态类上创建静态方法。也许像 EnumHelper.FromInt(int) 之类的东西。
但我想提出一个问题:为什么要转换为字符串或整数?这不是你通常使用可枚举的方式,除了序列化。但这应该由某种基础设施来处理,而不是您自己的代码。
You can either make extension methods on int and string.
Or make static method on some other static class. Maybe something like EnumHelper.FromInt(int).
But I would pose one question : Why do you want to convert to string or int? Its not how you normaly work with enumerables, except maybe serialisation. But that should be handled by some kind of infrastructure, not your own code.