2011-05-04 31 views

Respuesta

9

Una vez que haya creado la lista de cadenas, puede simplemente llamar al AddStrings().

O para las versiones anteriores de Delphi que no son compatibles con las sobrecargas AddStrings() que aceptan matrices, puede hacer las suyas propias.

function StringListFromStrings(const Strings: array of string): TStringList; 
var 
    i: Integer; 
begin 
    Result := TStringList.Create; 
    for i := low(Strings) to high(Strings) do 
    Result.Add(Strings[i]); 
end; 

El uso de un parámetro de matriz abierta ofrece la máxima flexibilidad para la persona que llama.

+2

perfecta, gracias! :) – xianghua

+5

Tenga en cuenta que esto solo funciona en D2009 en adelante (donde los genéricos están disponibles). El mismo código de tipo en D2007 (que admite la sintaxis del constructor de matriz dinámica) falla con "E2010 Tipos incompatibles: 'TStrings' y 'TStringArray'", donde 'escriba TStringArray = array of string', y se utiliza como' SA: = TStringArray. Create ('Uno', 'Dos', Tres '); 'y el TStringList.AddStrings se llama' SL.AddStrings (SA); ' –

+0

La última actualización funciona bien en todas las versiones de Delphi, incluso aquellas que no lo hacen tener matrices dinámicas (!) –

9

Para las versiones pre-genéricos de Delphi, se puede usar algo como esto:

type 
    TStringArray = array of string; 

procedure StringListFromStrings(const StringArray: TStringArray; 
    const SL: TStringList); 
var 
    // Versions of Delphi supporting for..in loops 
    s: string; 

    // Pre for..in version 
    // i: Integer; 
begin 
    // TStringList should be created and passed in, so it's clear 
    // where it should be free'd. 
    Assert(Assigned(SL)); 

    // Delphi versions with for..in support 
    for s in StringArray do 
    SL.Add(s); 

    // Pre for..in versions 
    // for i := Low(StringArray) to High(StringArray) do 
    // SL.Add(StringArray[i]); 
end; 
+2

+1 para el crujiente-viejo-delphi-versions-love. –

+0

@Warren: Gracias. Algunos de nosotros estamos atascados usándolos porque tenemos proyectos que no necesitan soporte Unicode (en las aplicaciones internas en particular) y por lo tanto no pueden justificar el trabajo para convertirlos a nuevas versiones de Delphi (y no pueden justificar el gasto de las nuevas versiones en sí mismas porque a los futuros no les importan los Unicode o los genéricos, etc.). –

+0

Entiendo totalmente. :-) –