相关疑难解决方法(0)

为什么两个别名的"字符串数组"处理不同?

在Pascal中有两种类型声明:

  • 类型别名:类型NewName = OldType
  • 类型创建:类型NewType = type OldType

前者只是创建方便的速记,如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基础知识.

现在让我们看一个特定类型和两个别名:

  • System.Types.TStringDynArray = 字符串数组 ;
  • System.TArray <T> = T的数组 ;
    • 特别是这意味着 TArray <string> = 字符串数组 ; …

delphi generics

12
推荐指数
2
解决办法
2334
查看次数

有没有什么方法可以将TArray <string>转换成TStringDynArray?

相当大一部分代码(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)

arrays delphi generics collections dynamic

5
推荐指数
1
解决办法
2126
查看次数

标签 统计

delphi ×2

generics ×2

arrays ×1

collections ×1

dynamic ×1