【问题标题】:Meaning of ENUM as a data typeENUM 作为数据类型的含义
【发布时间】:2022-07-07 18:39:06
【问题描述】:

我一直在阅读“枚举是一种数据类型”的声明(例如参见here)。我试图更好地理解该语句的含义。于是我写了如下代码。

Imports System
Imports System.Enum
Module Program
    Enum colours As Byte
        Red = 5
        Blue
        Green
    End Enum
    Sub Main(args As String())
        Dim c As colours
        Console.WriteLine(c.Red) 'Prints 5
        Console.ReadLine()
    End Sub
End Module

因为枚举已被声明为 BYTE 类型,这意味着与枚举字段关联的常量的类型将是字节类型。但这并不能真正解释枚举作为数据类型的想法。所以我尝试定义一个colours 类型的变量,并尝试通过Dim c As coloursc.Red 访问枚举成员,它成功了。然而,此时出现了两个问题:

  1. c.Red 给出警告消息Access of a shared member, enum member or nested type through an instance; qualifying expression will not be evaluated。我理解警告信息中的第一句话,但不理解第二句话。在这种情况下,不应评估的限定表达式是什么——c.Red 可以正常工作??

  2. 虽然我可以通过变量c访问枚举成员,但这似乎没有必要,因为同样的事情可以通过写colours.red来完成。因此,尽管Dim c as colours 声明使枚举看起来更像是一种数据类型,但它似乎并没有多大用处。如果这是正确的,有人可以给我一个例子,以更现实的方式说明枚举作为数据类型的想法。

【问题讨论】:

  • 摆脱Imports System.Enum。这对你没有任何作用。
  • @John 谢谢。注意到。

标签: vb.net


【解决方案1】:

Enum 的意义在于提供特定场景中有效值的有限列表。底层类型是数字,因此系统使用起来非常高效,但字段标签是描述性的,开发人员可以轻松使用。您可以使用String 使开发人员同样容易,但您会失去效率,并且您也失去了限制值范围的能力。同样,您可以使用数值数据类型来保持效率,但您会失去用户友好性,并且您也再次失去限制值范围的能力。

至于使用值,拥有colours 类型的字段然后通过该字段访问colours.Red 是没有意义的。这就像拥有一个DateTime 类型的字段,然后通过该字段访问DateTime.TryParse 方法。这样做是没有逻辑的。您将DateTime 值分配给该字段,您从该字段获得DateTime 值并将该值与其他DateTime 值进行比较,但您通过类型访问TryParse 方法,而不是该类型的实例类型。 Enum 类型上的字段也是如此:您为其分配一个值,从中获取一个值,将该值与相同类型的其他值进行比较,但您通过类型本身访问该类型的字段.

更多关注...

【讨论】:

    猜你喜欢
    • 2013-09-15
    • 1970-01-01
    • 1970-01-01
    • 2017-12-30
    • 1970-01-01
    • 2011-03-17
    • 1970-01-01
    • 2012-04-08
    • 1970-01-01
    相关资源
    最近更新 更多