【发布时间】:2012-05-19 02:01:05
【问题描述】:
我对扩展有点陌生。因为我不想写,所以在发布之前我四处寻找现有的答案,但我没有看到任何我认为有帮助的东西。
我想要一个带有 Flag 属性的枚举的扩展方法,我可以调用它基本上将另一个枚举/标志附加到调用枚举。
在有人将其否决为 Int32.MinValue 之前,我确实看起来相当数量,但我发现的只是一堆关于“IsFlagSo-and-SoSet”和标志处理的问题,但不是简单地添加一个标志。
我将枚举定义如下:
[Flags]
internal enum eDiskFormat
{
None = 0x00,
_3D = 0x01,
Blu_ray_3D = 0x02,
Blu_ray = 0x04,
DigitalCopy = 0x08,
Dvd = 0x10
}
扩展名被定义为:
internal static void AddFormat(this Movie.eDiskFormat target, Movie.eDiskFormat newFormat)
{
target |= newFormat;
}
当我如下调用它时,我希望生成的枚举是 Movie.eDiskFormat.Blu_ray...(它被初始化为 eDiskFormat.None)。
m.DiskFormat.AddFormat(Movie.eDiskFormat.Blu_ray);
相反,结果值仍然是 eDiskFormat.None。我以为用“this”传递变量是非常类似于通过引用传递,但我显然是不正确的。方法内部的值和我想的一样,但是结果……好吧,我想我已经说过了;所以这个问题。
【问题讨论】:
-
请不要在标题前加上“C# enum”之类的前缀。这就是标签的用途。
-
看看这里:codeproject.com/Articles/37921/Enums-Flags-and-C-Oh-my-bad-pun 那里有一些不错的扩展。
-
@ChrisSinclair 谢谢,那是一篇好文章。
标签: c# enums extension-methods