String.Split Delphi 东京发生了怎样的变化?

How did String.Split change in Delphi Tokyo?

以下代码示例将在 Delphi XE5 中编译到 Seattle (10.0)。 在 Delphi Tokyo (10.2) 中,我在 ExcludeEmpty 参数上遇到编译错误(E2003 未声明的标识符:'ExcludeEmpty')。

出了什么问题?

{$APPTYPE CONSOLE}

{$R *.res}

uses
  System.SysUtils;
  var S : String ;
      SA : Tarray<String> ;
begin
  S := '1234 5678' ;
  SA := S.Split([' '], ExcludeEmpty)
end.

这是一个旧枚举,值 (None, ExcludeEmpty, ExcludeLastEmpty) 没有像新枚举那样的前缀以避免标识符冲突。使用 {$SCOPEDENUMS ON} 编译会强制使用作用域来防止冲突问题。

 SA := S.Split([' '], TStringSplitOptions.ExcludeEmpty);

我不知道 Delphi 的所有版本都使用此选项编译此枚举,但 Delphi 11 知道。