【问题标题】:How to mark as deprecated a single enum value in Delphi如何在 Delphi 中将单个枚举值标记为已弃用
【发布时间】:2012-03-14 10:30:30
【问题描述】:

我希望拥有以下内容:

TEnumType = (
  etValue1 = 1,
  etValue2 = 2 deprecated,
  etValue3 = 3);

返回:

[DCC Error] unt_CollectionImportType.pas(19): E2029 ',' or ')' expected 
but identifier 'deprecated' found.

有没有办法指示编译器该值已被弃用。

【问题讨论】:

  • 我认为这是不可能的,一种方法是使用 {$MESSAGE WARN 'TEnumType.etValue2 is deprecated'} 让用户知道它已被弃用...
  • @dorin 那不好。这只会在您每次编译时而不是在您使用符号时创建一个警告。
  • @David 毕竟没那么简单。 :)
  • @DorinDuminica,这太粗糙了,甚至无法与该指令提供的功能相提并论。无论如何,如果有任何人会创建一个 QC 条目 - 它会得到我的投票。
  • @craig 你的回答很聪明,但它仍然是一种解决方法。

标签: delphi enums delphi-xe2 deprecated


【解决方案1】:
type
  TEnumType = (
    etValue1 = 1,
    etDeprecated2 = 2, // was: etValue2; Renamed so we can deprecate it by name
    etValue3 = 3);

const
   etValue2 = etDeprecated2 deprecated; // Declares a constant mapped to the renamed enum value.

【讨论】:

  • @Rudy - 是的,但这就是目标。将实际的枚举值替换为不会使用的名称,然后将现有(已弃用的)枚举值声明为新名称的“别名”,并将 alias 标记为已弃用。现有代码使用旧名称(别名),因此编译器会通过警告报告使用不推荐使用的值名称。这个答案完美地解决了这个问题,而且非常巧妙地恕我直言。
  • 话虽如此,我会说如果不再使用该值,那么只需删除它或更改它的名称就足够了。然后,您会得到编译器错误,而不是编译器警告,除非并且直到您消除了所有已弃用符号的使用(这肯定是最终目标)。
  • +1,非常好。这种答案让我觉得我应该问更多问题
  • @Deltics:只有在示例中给出值的情况下才能做到这一点。当您依赖隐式枚举编号(即TEnumType = (etZero, etOne, Two))时,您不能/不应该从列表中删除一个值,尤其是当您将相应的数值存储在其他地方时。重命名是唯一的选择。我同意不需要别名,但它确实提供了有用的警告,而不仅仅是关于未声明标识符的错误消息。
  • +1 尽管有警告:这将中断已弃用值的 DFM 流,因为 DFM 流将查看值的枚举类型,而不是 const。因此,当您有一个包含值 etValue2 的现有 DFM 文件时,它会在读取该 DFM 文件时崩溃。
猜你喜欢
  • 1970-01-01
  • 2012-03-18
  • 2012-04-27
  • 1970-01-01
  • 2023-04-10
  • 2012-01-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多