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 知道。
以下代码示例将在 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 知道。