Delphi - 如何排除/关闭集合中的所有值?

use*_*073 0 delphi set

Delphi XE6 - 我有一套.我想要一个简单的方法来关闭所有元素.即,而不是排除,像ExcludeALL之类的东西.我试图遍历所有元素,但我收到一个错误.

 type
      TSearchParametersType = 
       (smDUNSAvailable = 1, 
        smDUNSHit,    
        smDUNSMiss,    
        smDUNSAbsent, 
        smRegistryAvailable, 
        smRegistryHit, 
        smRegistryAbsent, 
        smRegistryMiss, 
        smNameAvailable, 
        smNameHitExact, 
        smNameHitWords, 
        smNameMiss  
    );

    // Now create a set type, where we can have a variable that has all the values of TSearchParametersType
    type
      TSearchParametersSet = set of TSearchParametersType;
 ...   

   var
   i : Integer;
   sSearchStatus: TSearchParametersSet;

    begin 
    for i :=  smDUNSAvailable to  smNameMiss do
      Exclude(sSearchStatus, i);
Run Code Online (Sandbox Code Playgroud)

我得到的错误是"不兼容的类型:'整数'和TSearchParametersType."

除了MANUALLY通过每个元素之外,有没有一种简单的方法可以排除ALL?

谢谢

Dav*_*nan 5

文档:

每个集合类型都可以保存空集,用[]表示.

因此,您可以将空集分配给变量,如下所示:

sSearchStatus := [];
Run Code Online (Sandbox Code Playgroud)

FWIW,您的代码失败,因为smDUNSAvailablesmNameMiss是类型的TSearchParametersType,因此与i类型的变量不兼容Integer.为了使代码工作,您需要将循环变量更改为类型TSearchParametersType.