在 C# 中扩展枚举
我想知道是否可以扩展 C# 中的 Enum 类型来实现我的自定义 Enum.GetValues(type) 并像 Enum.GetMyCustomValues(type) 那样调用它
我正在尝试实现这样的东西:
public static bool IsFlagSet<T>(this T value, T flag) where T : Enum
{
return (value & flag) != (T)0;
}
但它无法完成.. 。 我能做些什么? 干杯
I was wondering whether or not I can extend the Enum type in C# to implement my custom Enum.GetValues(type) and call it like Enum.GetMyCustomValues(type)
I am trying to implement something like this:
public static bool IsFlagSet<T>(this T value, T flag) where T : Enum
{
return (value & flag) != (T)0;
}
but it cannot be done...
any work arounds I can do?
Cheers
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
扩展适用于实例,而不是创建静态方法。您可以使用
public static void MyExtensions(this Enum value)
扩展基本 Enum。但这仍然只会在您创建的 Enum 实例上创建方法。添加静态方法(就像您在类外部讨论的那样)的唯一方法是该类是分部类。编辑:为了做你想做的事情,我写了以下
*警告,这种方法在使用之前需要仔细考虑,我希望有更好的方法来做到这一点。
Extensions work on instances, not for creating static methods. You can extend the base Enum using
public static void MyExtensions(this Enum value)
. But this would still only create methods on Enum instances you create. The only way to add static methods like you're talking about externally for a class is if the class is a partial class.Edit: to do something like you want I wrote the following
*warning, this method needs to be thought out more prior to use, I'm hoping there is a better way to do it.
我认为您可能正在寻找枚举的扩展方法。
这是一个起始链接:< a href="http://pietschsoft.com/post/2008/07/C-Enhance-Enums-using-Extension-Methods.aspx" rel="nofollow noreferrer">http://pietschsoft.com/post/2008 /07/C-Enhance-Enums-using-Extension-Methods.aspx
I think you may be looking for extension methods for enums.
Here's a starting link: http://pietschsoft.com/post/2008/07/C-Enhance-Enums-using-Extension-Methods.aspx
还有一个例子。
以及用法。
And one more example.
And the usage.
这是我能想到的最好的测试。请记住,枚举可以基于 64 位整数:
Here's test best I could think of. Remember that enums could be based on 64 bit ints: