如何在Delphi中弃用Array类型声明?

8

我需要将一个数组类型声明(实际上不止一个)标记为已弃用,以帮助迁移我们的代码到更先进和灵活的TArray<T>泛型类型。

我尝试过这样做:

type
  TArrayChars = array of Char deprecated;

但我遇到了编译错误:E2029 ';' 预期,但找到了标识符'deprecated'

如果声明的类型不是数组,例如:

type
  TFieldChars = set of Char deprecated;

请注意,这应该是按设计可行的。
我错过了什么吗?
这似乎是Delphi中的一个错误(至少在10.1 Berlin和10.2 Tokyo中)。
我的答案提供了一个巧妙的解决方法。
type
  TArrayCharsOld = array of Char;
  TArrayChars    = TArrayCharsOld deprecated;

我会向Embarcadero提交一个错误报告。
这是我提交的Embarcadero QC问题: https://quality.embarcadero.com/browse/RSP-18316

1
你应该提交一个错误报告。 - Johan
@William 不,这不是那个问题的重复,我在这里谈论的是声明一种类型已过时,应该能够通过阅读文档实现。属性是另一回事,并未在文档中提到。 - Bozzy
@Bozzy,但是链接问题的答案可以用于您的问题。 - William
@William 怎么办?链接的文档说明问题中的代码应该可以编译。 - David Heffernan
@DavidHeffernan 这可能是 Delphi 的一个 bug。 - William
显示剩余5条评论
2个回答

11

有一种方法可以解决这个问题(至少在10.1 Berlin中可以)。

type
  TArrayCharsOld = array of Char;
  TArrayChars = TArrayCharsOld deprecated;

编译。


没错,那可以完成任务,而且很巧妙。我尝试过了,看到它编译通过了,但是没有想到将别名排列得如此巧妙,以至于弃用的类型被代码中其他部分使用。干得好。 - David Heffernan
是的,它可以工作!实际上,每次使用已弃用类型时我会收到两个相同的警告!也许这是另一个错误? - Bozzy
是的,我也收到了两个警告。 - Dsm
也许这会加强想要摆脱某些东西的感觉! - Bozzy
我认为,您无法直接弃用数组声明是一个错误,而不是“按设计”。现在出现两个警告的事实可能与该错误有关。 - Rudy Velthuis

6
没有什么可说的。动态数组类型声明不能被标记为已弃用。
我认为这是一个缺陷。文档中写道:
引用: “提示”指令平台、弃用和库可以附加到任何声明。这些指令将在编译时产生警告。提示指令可以应用于类型声明、变量声明、类、接口和结构声明、类或记录中的字段声明、过程、函数和方法声明以及单元声明。
由于您的动态数组类型声明是一种类型声明,因此符合此处列出的要求。

这是一种人们永远不希望阅读到的答案。我将向Embarcadero提交一个错误报告。 - Bozzy
1
无论采用哪种解决方法,您仍应提交错误报告。 - David Heffernan
1
当然可以。变通方法不是解决方案。 - Bozzy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接