Pergunta

qual é a diferença na utilização de um padrão

type 
  sl: TStringList 

em comparação com usando um TList genérico

type 
  sl: TList<string>

?

Tanto quanto eu posso ver, ambos se comportam exatamente o mesmo.

É apenas uma outra maneira de fazer a mesma coisa?

Existem situações em que um seria melhor que o outro?

Obrigado!

Foi útil?

Solução

  • TStringList é um descendente de TStrings.
  • TStringList sabe como classificar-se em ordem alfabética.
  • TStringList tem uma Objetos propriedade.
  • TStringList não faz o seu incompatível código com todas as versões anteriores do Delphi.
  • TStringList pode ser usado como uma propriedade publicado. (Bug impede que um classes genéricas de ser publicada, por agora.)

Outras dicas

TStringList tem sido em torno de um longo tempo em Delphi antes genéricos estavam ao redor. Por isso, construiu-se um punhado de características úteis que uma lista genérica de cordas não teria.

A versão genéricos é apenas criar um novo tipo que é idêntico ao TList que as obras sobre o tipo de cadeia. (.Add (), .Colocar (), .Remover (), .Clear (), etc.)

TStringList tem os métodos tipo TList básicas e outros métodos personalizado para trabalhar com strings, como .SaveToFile () e .LoadFromFile ()

Se você quiser compatibilidade com versões anteriores, então TStringList é definitivamente o caminho a percorrer.
Se você quiser funcionalidade melhorada para trabalhar com uma lista de strings, então TStringList é o caminho a percorrer. Se você tem alguns fundamentos básicos de codificação que pretende trabalhar com uma lista de qualquer tipo, então talvez você precisa olhar longe de TStringList.

  • Como TStringList é um descendente de TStrings ele é compatível com a propriedade Linhas de TMemo, itens de TListBox e TComboBox e outros componentes VCL. Assim, pode usar cbList.Items: = StringList; // chama internamente TStrings.Assign

Eu provavelmente diria se você quiser para trás uso compatibilidade TStringList, e se você quiser compatibilidade futura (talvez a opção de mudança que lista de strings para dizer lista de Int64s no futuro), em seguida, ir para TList.

Do ponto de vista da memória uso de memória TStringList é aumentada com o tamanho do ponteiro TObject adicionado a cada item. uso de memória TList é aumentada com o tamanho de ponteiro adicionado a cada item. Se for necessária apenas uma matriz de strings, sem pesquisa, substituindo, classificação ou operações associativa, uma matriz dinâmica (array de string) deve ser apenas o suficiente. Esta falta de um gerenciamento de memória boa de TStringList ou TList, mas, em teoria, deve usar menos memória.

O TStringList é um muito versátil classe de Delphi. Eu usei (e abusado ;-)) seus objetos de propriedade muitas vezes. É muito interessante para traduzir rapidamente uma cadeia delimitada a um controle como um TMemo e similares (TListBox, TComboBox, apenas para listar alguns).

Eu só não gosto muito TList, como TStringList satisfez minhas necessidades sem a necessidade de tratar ponteiros (como Tlist é uma lista de valores de ponteiro).

EDIT: eu confundido o TList (lista de ponteiros) com TList (lista genérica de cordas). Desculpe por isso. Meu ponto permanece:. TStringList é apenas muito mais do que uma simples lista de strings

Para a maioria dos fins que TStringList foi abusado no passado, TObjectDictionary é melhor - é mais rápido e não precisa de ordenação

.

Se você precisa de um objeto TStrings (geralmente para o material de interface do usuário, uma vez que o VCL não usa os genéricos até mesmo para XE5) uso TStringList - o elenco exigido de TObject é chato, mas não um showstopper

.

TStringList tem sido usado por muito tempo e tem muitas vantagens, todos os mencionados por Rob Kennedy.

A desvantagem única real de usá-lo como um par de uma string e um objeto é a necessidade de lançar objeto para o tipo real esperado e armazenados nesta lista (quando a leitura) e, tanto quanto eu sei Embarcadero não forneceu Delphi 2009 e até bibliotecas VCL com versão genérica do TStringList.

Para superar essa limitação implementei essa lista para uso interno e por quase 3 anos que serve ao seu propósito, então eu decidi compartilhá-lo hoje: https://github.com/t00/deltoo#tgenericstringlist

Uma nota importante -. Muda a propriedade padrão de strings em objetos como na maioria dos casos quando o objeto é armazenado em uma lista que também é de propriedade principalmente acessados ??do mesmo

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top