procedure ( const APermissions: TClassicStringDynArray; const AGrantResults: TArray<string> {TClassicPermissionStatusDynArray})
begin
if PermissionsService.IsEveryPermissionGranted(AGrantResults) then
问题是,匿名方法的参数列表和类型应该是什么? 如果我使
AGrantResults
是类型
TClassicPermissionStatusDynArray
,那么由于类型不匹配,我无法调用
PermissionsService.IsEveryPermissionGranted
,如果我将其制作为
TArray<string>
,则编译器与所调用的外部方法不匹配任何过载。
在我看来,这似乎是在RTL本身中可能很糟糕,在Delphi 12.2中破裂的东西并未在较早版本中破裂,或者编译器本身未能认识到两种别名类型实际上是对同一事物的别名,这是RequestPermissions
..。有某种方法可以进行编译,但要调用
TArray<string>
,还是我应该重写IsEveryPermissionGranted
本人,这只是一个助手方法? 这里还有其他事情可以使用不同的语法或类型命名吗?
编译器本身未能认识到两种别名类型实际上是同一件事的别名,这就是
IsEveryPermissionGranted
结构类型(Delphi):数组类型和分配
TArray<string>
和
TClassicStringDynArray
不是TClassicPermissionStatusDynArray
的别名,它们是
TArray<string>
的别名,因此它们是独特的类型,并且与彼此或array of string
TArray<string>
不直接兼容。
RequestPermissions()
回回调使用TClassic...
类型,因此您也需要使用它们。
,但是,
IsEveryPermissionGranted()
使用TArray<string>
,因此您必须在类型之间明确转换,例如:将Tarray转换为tstringdynarray的任何有效方法?是一个
rtl错误,而不是compiler
错误。 您应该将问题报告为emparcadero。 他们在标准化RTL使用TArray