编程语言
首页 > 编程语言> > c#-修改枚举值的扩展方法

c#-修改枚举值的扩展方法

作者:互联网

我是扩展的新手.在发布此答案之前,我一直在寻找一个已有的答案,因为我不想写,但我发现没有发现任何有用的答案.

我想要一个带有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”传递变量与通过引用传递非常相似,但是我显然是错误的.方法中的值是我所想的,但是结果……好吧,我想我已经说过了;因此这个问题.

解决方法:

枚举是值类型.他们是一成不变的.您无法更改其值.

您能做的最好的事情是这样的:

m.DiskFormat = m.DiskFormat.AddFormat(Movie.eDiskFormat.Blu_ray); 

哪里

internal static Movie.eDiskFormat AddFormat(this Movie.eDiskFormat target, 
                                                 Movie.eDiskFormat newFormat)   
{   
    return target | newFormat;   
}   

标签:enums,extension-methods,c
来源: https://codeday.me/bug/20191201/2079864.html