Ron*_*rby 7 .net c# enums flags bit-fields
而不是这样做为标志枚举变量添加一个值:
MyFlags flags = MyFlags.Pepsi;
flags = flags | MyFlags.Coke;
Run Code Online (Sandbox Code Playgroud)
我想创建一个扩展方法来实现这一点:
MyFlags flags = MyFlags.Pepsi;
flags.Add(MyFlags.Coke);
Run Code Online (Sandbox Code Playgroud)
可能?你怎么做呢?
Mat*_*eer 17
没有任何有用的方式.枚举是值类型,因此在创建扩展方法时,将传入枚举的副本.这意味着您需要返回它以便使用它
public static class FlagExtensions
{
public static MyFlags Add(this MyFlags me, MyFlags toAdd)
{
return me | toAdd;
}
}
flags = flags.Add(MyFlags.Coke); // not gaining much here
Run Code Online (Sandbox Code Playgroud)
另一个问题是你不能以任何有意义的方式使这个通用.您必须为每个枚举类型创建一个扩展方法.
编辑:
你可以通过颠倒枚举的角色来实现一个合适的近似:
public static class FlagsExtensions
{
public static void AddTo(this MyFlags add, ref MyFlags addTo)
{
addTo = addTo | add;
}
}
MyFlags.Coke.AddTo(ref flags);
Run Code Online (Sandbox Code Playgroud)
Ofi*_*fir 10
我也在研究Enum扩展方法。
我试图为Enums创建添加/删除通用方法,但我发现它是多余的。
要添加,您可以执行以下操作:
MyFlags flags = MyFlags.Pepsi;
flags |= MyFlags.Coke;
Run Code Online (Sandbox Code Playgroud)
要删除,您可以执行以下操作:
MyFlags flags = MyFlags.Pepsi | MyFlags.Coke;
flags &= ~MyFlags.Coke;
Run Code Online (Sandbox Code Playgroud)
不要使用 XOR (^),如果它不存在,它会添加标志。
flags ^= MyFlags.Coke; // Do not use!!!
Run Code Online (Sandbox Code Playgroud)
希望它有所帮助。你可以在:我的博客上看到更多的扩展方法
| 归档时间: |
|
| 查看次数: |
12775 次 |
| 最近记录: |