【问题标题】:Enum bit operations with MonoMono 的枚举位操作
【发布时间】:2013-07-10 14:55:55
【问题描述】:

我正在尝试将程序从 .net 移植到 Mac OS X 上的 Mono,但在出现编译错误时无法编译它。我应该怎么做才能编译它?为什么在 Windows 上可以正常工作?

我是 C# 新手,尤其是在 mac os 上。

namespace my-project
{
    using System;

    [Flags]
    public enum MyEnum : uint
    {
        F_FLAG_1 = 0x00004,
        F_FLAG_2 = 0x00008
    }
 }

有错误的代码行:

if ((this.MyEnumField & num) != 0)

编译错误信息:

Error CS0019: Operator `&' cannot be applied to operands of type `MyEnum' and `uint' (CS0019) (my-project)

我正在使用 Xamarin 工作室。

【问题讨论】:

  • 好的。似乎我找到了解决方案 - 它需要将 num 显式转换为 MyEnum ...可能有一些编译器设置可以避免这种转换?

标签: c# mono xamarin


【解决方案1】:

除了 Mono 是正确的,我无法理解它,C# 规范有这样的说法;

枚举值和操作

每个枚举类型定义一个不同的类型; 需要显式枚举转换(第 6.2.2 节)才能在枚举类型和整数类型之间进行转换,或者在两个枚举类型之间进行转换

...和...

枚举逻辑运算符

每个枚举类型 E 都隐含地提供了以下预定义的逻辑运算符:

  • E 运算符 &(E x, E y);
  • E 运算符 |(E x, E y);
  • E 运算符 ^(E x, E y);

也就是说,逻辑运算符仅定义为 enum*enum,并且要在带有枚举的逻辑表达式中使用整数类型,它应该需要显式转换。

【讨论】:

    【解决方案2】:

    如果它是用 .NET 而不是 Mono 编译的,这是一个 Mono 编译器错误,请在 http://bugzilla.xamarin.com/ 报告它

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-31
      • 2011-12-06
      • 2017-08-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多