【问题标题】:Why does Enum need to use a CType?为什么 Enum 需要使用 CType?
【发布时间】:2011-03-24 22:36:06
【问题描述】:

在 vb.net 中,我将枚举定义为整数:

    Enum enUtilityTypeDetailStudentEntryWorkflow As Integer
        enUTDSEW_Default = 379
        enUTDSEW_ApplicantRecordBook = 380
    End Enum

我想将 Enum 直接分配给一个变量,但它不起作用。

        EntryWorkflowLookUpEdit.EditValue = enUtilityTypeDetailStudentEntryWorkflow.enUTDSEW_Default

我最终使用了 CType 并将其转换为 Integer。

        EntryWorkflowLookUpEdit.EditValue = CType(enUtilityTypeDetailStudentEntryWorkflow.enUTDSEW_Default, Integer)

这行得通,但它给代码增加了很多噪音,似乎 Enum 已经被定义为一个 Integer,让我想,为什么我必须再次分配它?

还有其他方法可以在没有噪音的情况下完成此任务吗? 我知道我在这里遗漏了一些东西。

非常感谢。

【问题讨论】:

    标签: vb.net enums


    【解决方案1】:

    枚举被定义为使用整数作为其基础类型。

    这是一个显式转换 IMO,这是一件好事,因为这意味着你不会意外最终使用你真正想要的枚举值 只使用一个直整数。枚举的重点是有效地拥有不同的数字“视图” - 并且更改您正在使用的“视图”应该是明确的。

    我希望在大多数代码库中相对很少有这样的转换。

    如果这对您来说是一个重大问题,您总是可以编写一个 ToInt32 或类似的扩展方法,它只是执行转换。

    就我个人而言,如果我想减少这段代码中的干扰,我会尝试找到一个比 enUtilityTypeDetailStudentEntryWorkflow 更短的名称 - 同时符合 .NET 命名约定。

    【讨论】:

    • 感谢 Jon,我仍在努力掌握一些概念。当您添加它时它会变得很烦人并且它什么都不做(没有错误等)但是有几行它可以在 IF 语句中使用而不必具有 CType。我将不得不对此做更多的阅读。您(或其他任何人)有任何我可以查看的资源建议吗?
    • 在命名约定上,我必须承认,我就像一只羊,追随其他人在我之前所做的事情(有数百个类似格式的枚举),但我认为遵循 .NET 是有意义的命名约定。我将更改我的 Enum 并向其他开发人员提及。前缀不止一次而且两次是愚蠢的!
    • @Gerhard:我不知道这方面的任何特定资源 - 老实说,我只是看看 MSDN。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-01
    • 1970-01-01
    • 2015-01-07
    • 1970-01-01
    相关资源
    最近更新 更多