向位字段添加值的扩展方法(标志枚举)
我不想这样做来向 flags 枚举变量添加值:
MyFlags flags = MyFlags.Pepsi;
flags = flags | MyFlags.Coke;
我想创建一个扩展方法来实现这一点:
MyFlags flags = MyFlags.Pepsi;
flags.Add(MyFlags.Coke);
可能吗? 你如何做到这一点?
Instead of doing this to add a value to flags enum variable:
MyFlags flags = MyFlags.Pepsi;
flags = flags | MyFlags.Coke;
I'd like to create an extension method to make this possible:
MyFlags flags = MyFlags.Pepsi;
flags.Add(MyFlags.Coke);
Possible? How do you do it?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
没有任何有用的方式。枚举是值类型,因此在创建扩展方法时,将传入枚举的副本。这意味着您需要返回它才能使用它
,另一个问题是您无法以任何有意义的方式创建此泛型方式。您必须为每个枚举类型创建一个扩展方法。
编辑:
您可以通过反转枚举的角色来实现一个不错的近似:
Not in any useful way. Enums are value types, so when making an extension method a copy of the enum will get passed in. This means you need to return it in order to make use of it
And the other problem is you can't make this generic in any meaningful way. You'd have to create one extension method per enum type.
EDIT:
You can pull off a decent approximation by reversing the roles of the enums:
我还在研究
Enum
扩展方法。我尝试为
Enum
创建添加/删除通用方法,但我发现它是多余的。要添加,您可以执行以下操作:
要删除,您可以执行以下操作:
不要使用 XOR (^),如果该标志不存在,它会添加该标志。
希望有帮助。您可以在以下位置查看更多扩展方法: 我的博客
I'm also working on
Enum
extension methods.I tried to create add / remove generic methods for
Enum
s, but I found it redundant.To add you can just do:
To remove you can do:
Do not use XOR (^), it adds the flag if it does not exist.
Hope it helped. You can see more extension methods on: My blog
这不是一个解决方案,但如果您的目标是减少冗长并提高可读性,那么带有扩展方法的流畅界面至少可以部分提供帮助:
Not a solution, but if your aim is to reduce verbosity and increase readability, a fluent interface with extension methods could help at least partially:
这对我来说很好用
This works fine for me