在Pascal中有两种类型声明:
前者只是创建方便的速记,如C中的typedef.别名是彼此兼容的,与原始类型兼容.创建的类型是故意不兼容的,并且在没有明确和不安全的情况下通过类型转换不能混合.
var
nn: NewName; nt: NewType; ot: OldType;
...
nn := ot; // should work
nt := ot; // should break with type safety violation error.
nt := NewType(ot); // Disabling type safety. Should work even if
// it has no sense semantically and types really ARE incompatible.
Run Code Online (Sandbox Code Playgroud)
根据我的理解,这些是Pascal基础知识.
现在让我们看一个特定类型和两个别名:
相当大一部分代码(delphi-dutil等)使用TStringDynArray.现在我想将所有键a转换TDictionary<string, string>为a TStringDynArray.不幸的是我才发现TDictionary.Keys.ToArray,这是TArray<T>.
我知道我可以编写一个简单的复制函数来进行原始内容复制,但我TStringDynArray通常非常大(大约10000个条目),所以我正在寻找一种有效的转换TArray<string>方式TStringDynArray.
function ConvertToStringDynArray(const A: TArray<string>): TStringDynArray;
var
I: Integer;
begin
assert(A <> nil);
SetLength(Result, Length(A));
for I := 0 to Length(A) - 1 do
Result[I] := A[I];
end;
Run Code Online (Sandbox Code Playgroud)