【问题标题】:Why can you use just the alias to declare a enum and not the .NET type?为什么只能使用别名来声明枚举而不是 .NET 类型?
【发布时间】:2015-01-08 02:52:32
【问题描述】:

这很好用..

public  enum NodeType : byte
{ Search, Analysis, Output, Input, Audio, Movement} 

这会返回编译器错误...

public  enum NodeType : Byte
{ Search, Analysis, Output, Input, Audio, Movement} 

使用反射时也会发生同样的情况...

那么,有人知道为什么enum-base 只是一个整数类型吗?

【问题讨论】:

标签: c# .net types enums


【解决方案1】:

可能它只是一个不完整的编译器实现(虽然有文档)。

从技术上讲,这也应该有效,但它没有。

using x = System.Byte;

public  enum NodeType : x
{ Search, Analysis, Output, Input, Audio, Movement}

所以编译器的解析器部分只允许固定列表byte, sbyte, short, ushort, int, uint, long, or ulong。我知道没有技术限制。

【讨论】:

    【解决方案2】:

    因为the specs这么说:

    枚举声明:
    属性选择 enum-modifiersopt 枚举标识符 enum-baseopt 枚举体;选择

    枚举基数:
    : 积分型

    枚举正文:
    { 枚举成员声明opt }
    { 枚举成员声明,​​}

    每个枚举类型都有一个对应的整数类型,称为基础类型 枚举类型。这种基础类型必须能够代表所有 枚举中定义的枚举值。枚举声明可以 显式声明 byte、sbyte、short、ushort、int、uint 的基础类型, 长或乌龙。请注意,char 不能用作基础类型。一个枚举 未显式声明基础类型的声明具有 int 的底层类型。

    ...

    integral-type定义为,

    积分型:
    sbyte
    字节

    超短
    整数
    单位

    乌龙
    字符

    【讨论】:

      【解决方案3】:

      Byte、Int32 等都是对象。由于枚举需要整数类型而这些不是,因此您会收到编译器错误。在这方面,C# 的枚举定义更接近于 C。

      这与 Java 非常不同,在 Java 中枚举是用词不当,因为它们实际上被命名为单例。

      【讨论】:

        猜你喜欢
        • 2014-09-22
        • 1970-01-01
        • 1970-01-01
        • 2011-02-22
        • 1970-01-01
        • 2016-09-03
        • 1970-01-01
        • 1970-01-01
        • 2022-11-28
        相关资源
        最近更新 更多