小编pen*_*ave的帖子

修改枚举值的扩展方法

我对扩展有点陌生。在发布此内容之前,我四处寻找现有的答案,因为我讨厌写,但我没有看到任何有用的内容。

我想要一个带有 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

    }
Run Code Online (Sandbox Code Playgroud)

扩展被定义为:

    internal static void AddFormat(this Movie.eDiskFormat target, Movie.eDiskFormat newFormat)
    {
        target |= newFormat;
    }
Run Code Online (Sandbox Code Playgroud)

当我按如下方式调用它时,我期望生成的枚举为 Movie.eDiskFormat.Blu_ray...(它被初始化为 eDiskFormat.None)。

m.DiskFormat.AddFormat(Movie.eDiskFormat.Blu_ray);
Run Code Online (Sandbox Code Playgroud)

相反,结果值仍然是 eDiskFormat.None。我认为用“this”传递变量与通过引用传递非常相似,但我显然是错误的。方法内部的值正如我所想,但结果......好吧,我想我已经说过了;因此这个问题。

c# extension-methods enums

5
推荐指数
1
解决办法
2611
查看次数

标签 统计

c# ×1

enums ×1

extension-methods ×1