可以防止非位掩码字段上的意外按位运算符吗?

发布于 2024-12-07 04:52:56 字数 508 浏览 1 评论 0原文

在 C# 中,建议将 [Flags] 属性添加到位掩码枚举,如下所示:

[Flags]
public enum Condiments
{
    None = 0,
    Ketchup = 1,
    Mustard = 2,
    Mayo = 4,
    Pickle = 8,
    AllTheWay = 15
}

我发现我的代码在没有 [Flags] 属性的枚举上错误地执行了位操作,而该属性根本不是位掩码(第一=1,第二=2,第三=3,等等)。这在逻辑上当然是错误的,但编译器完全可以接受。

我想知道是否有任何方法可以利用 [Flags] 属性或其他方法将其转变为编译时错误/警告。我不知道从哪里开始,但似乎应该是可行的,所以任何帮助将不胜感激。

In C# you are recommended to add the [Flags] attribute to bitmask enumerations, like so:

[Flags]
public enum Condiments
{
    None = 0,
    Ketchup = 1,
    Mustard = 2,
    Mayo = 4,
    Pickle = 8,
    AllTheWay = 15
}

I discovered I had code that erroneously performed bitwise operations on an enumeration without the [Flags] attribute that was not a bitmask at all (First=1, Second=2, Third=3, etc.). This was of course logically wrong, but perfectly acceptable to the compiler.

I'm wondering if there's any way to leverage the [Flags] attribute, or some other approach, to turn this into a compile-time error/warning. I don't know where to begin, but it seems like it should be doable, so any help would be appreciated.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

┊风居住的梦幻卍 2024-12-14 04:52:56

我建议进行此“自定义”检查,其中编译器无法找出问题使用 http://research.microsoft.com/en-us/projects/contracts/。代码合同,如果可以的话。

I would suggest for this "custom" checks, where compiler is not able to figure out the problem use http://research.microsoft.com/en-us/projects/contracts/. CodeContracts, if you can.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文