我是扩展的新手.在发布此答案之前,我一直在寻找一个已有的答案,因为我不想写,但我发现没有发现任何有用的答案.
我想要一个带有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
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。