C# 中枚举内的方法
在 Java 中,枚举中可以有方法。
C# 中是否存在这种可能性,或者它只是一个字符串集合,仅此而已?
我尝试重写 ToString()
但它无法编译。有人有简单的代码示例吗?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
在 Java 中,枚举中可以有方法。
C# 中是否存在这种可能性,或者它只是一个字符串集合,仅此而已?
我尝试重写 ToString()
但它无法编译。有人有简单的代码示例吗?
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(6)
您可以编写 扩展方法:
You can write extension methods for enum types:
您可以为枚举编写扩展方法:
如何:为枚举创建新方法(C# 编程指南)
You can write an extension method for your enum:
How to: Create a New Method for an Enumeration (C# Programming Guide)
另一种选择是使用 Jimmy 创建的 枚举类博加德。
基本上,您必须创建一个继承自他的
Enumeration
的类。示例:然后您可以像枚举一样使用它,并且可以在其中放入方法(除其他外):
您可以使用 NuGet。
虽然此实现不是该语言的本机实现,但其语法(构造和使用)非常接近于比 C# 更好的本机实现枚举的语言(<例如,a href="https://kotlinlang.org/docs/reference/enum-classes.html" rel="noreferrer">Kotlin)。
Another option is to use the Enumeration Class created by Jimmy Bogard.
Basically, you must create a class that inherits from his
Enumeration
. Example:Then you can use it like an enum, with the possibility to put methods inside it (among another things):
You can download it with NuGet.
Although this implementation is not native in the language, the syntax (construction and usage) is pretty close to languages that implement enums natively better than C# (Kotlin for example).
没有。您可以创建一个类,然后向该类添加一堆属性以在某种程度上模拟枚举,但这并不是真正的同一件事。
更好的模式是将你的方法放在与你的 emum 分开的类中。
Nope. You can create a class, then add a bunch of properties to the class to somewhat emulate an enum, but thats not really the same thing.
A better pattern would be to put your methods in a class separate from your emum.
由于我遇到了,并且需要与枚举完全相反的字符串,因此这里有一个通用解决方案:
这也忽略大小写,并且对于解析枚举的 REST-Response 以获得更多类型安全性非常方便。
希望它可以帮助某人
Since I came across, and needed the exact opposite of enum to string, here is a Generic solution:
This also ignores case and is very handy for parsing REST-Response to your enum to obtain more type safety.
Hopefully it helps someone
C# 不允许在枚举器中使用方法,因为它不是基于类的原则,而是带有字符串和值的二维数组。
在这种情况下,微软强烈建议不要使用类,而是使用 (data)struct(ures) ; STRUCT 旨在作为数据及其处理程序的轻量级,并且可以很好地处理函数。 C# 及其编译器不具备 JAVA 中的跟踪和效率功能,其中某个类/方法使用的次数越多,它的运行速度就越快,并且其使用变得“预期”。 C# 根本不具备这一点,因此为了区分,请使用 STRUCT 而不是 CLASS。
C# Does not allow use of methods in enumerators as it is not a class based principle, but rather an 2 dimensional array with a string and value.
Use of classes is highly discouraged by Microsoft in this case, use (data)struct(ures) instead; The STRUCT is intended as a light class for data and its handlers and can handle functions just fine. C# and its compiler don't have the tracking and efficiency capabilities as one knows from JAVA, where the more times a certain class / method is used the faster it runs and its use becomes 'anticipated'. C# simply doesn't have that, so to differentiate, use STRUCT instead of CLASS.