delphi – 为什么两个看似相同的动态数组类型被认为不兼容?

只是一个小问题,我没有找到具体的答案所以我猜这可能会更快在这里问.

编译器拒绝以下代码,并出现以下错误

incompatible types ‘dynamic array’ and ‘array of string’

TMailInfo = record
  FileName,MailAdresse,MailBCC,MailCC,MailBetreff: string;
  MailText,Anhang: array of string;
  MailAckNowledge,MailTXT: Boolean
end;

class function TEMail.SendOutlookCOMMail(aFileName,aMailAdresse,aMailBCC,aMailCC,aMailBetreff: string; 
  aMailText,aAnhang: array of string; 
  const aMailAckNowledge,aMailTXT: Boolean): Boolean;
var
  mailInfo: TMailInfo;
begin
...
  mailInfo.MailBetreff := aMailBetreff;  // these two lines cause the error
  mailInfo.MailText := aMailText;
...
end;

我究竟做错了什么?两者都是字符串数组,所以我不明白为什么一个似乎是动态的.

解决方法

您无法轻松分配给MailText和Anhang,因为您无法声明具有兼容类型的其他对象.那是因为你在记录声明中使用了内联的动态数组类型.您确实需要使用可以命名的类型.为了更好地说明,请考虑以下事项:
X: array of Integer;
Y: array of Integer;

现在X和Y的类型不同,X:= Y不能编译.

一个问题是你的开放数组参数.开放数组参数与任何内容都不兼容.您可以逐个元素复制,但不能一次性分配数组.

最好的方法是声明这样的字段:

MailText,Anhang: TArray<string>;

并将函数中的open数组参数更改为该类型.

然后,您需要决定是要复制引用还是数组:

MailText := aMailText; // copy reference,or
MailText := copy(aMailText); // copy array

相关文章

 从网上看到《Delphi API HOOK完全说明》这篇文章,基本上都...
  从网上看到《Delphi API HOOK完全说明》这篇文章,基本上...
ffmpeg 是一套强大的开源的多媒体库 一般都是用 c/c+&#x...
32位CPU所含有的寄存器有:4个数据寄存器(EAX、EBX、ECX和ED...
1 mov dst, src dst是目的操作数,src是源操作数,指令实现的...