Pergunta
Eu vi essa resposta de Jon sobre objeto genérico Inicializar com tipo desconhecido :
Se você quer uma única coleção para conter vários tipos não relacionados de valores, no entanto, você terá que usar
List<object>
Eu não estou comparando ArrayList
vs List<>
, mas ArrayList
vs List<object>
, como ambos serão expor elementos do tipo object
. Qual seria o benefício da utilização de qualquer um neste caso?
EDIT: Não é nenhuma preocupação com a segurança tipo aqui, já que tanto a classe está expondo object
como seu item. Uma ainda precisa fundido a partir de object
para o tipo desejado. Estou mais interessado em outra coisa senão segurança de tipo.
Edit: Obrigado Marc Gravell e Sean para a resposta. Desculpe, eu só pode escolher 1 como resposta, então eu vou até votar ambos.
Solução
Você vai ser capaz de usar os métodos de extensão LINQ diretamente com List<object>
, mas não com ArrayList
, a menos que você injetar um Cast<object>()
/ OfType<object>
(graças a IEnumerable<object>
vs IEnumerable
). Que vale a pena um pouco, mesmo que você não precisa digitar a segurança etc.
A velocidade será sobre o mesmo; estruturas ainda serão encaixotados, etc - então não há muito mais para distingui-los. Só que eu tendem a ver ArrayList
como "oops, alguém está escrevendo código legado de novo ..." ;-p
Outras dicas
Uma grande vantagem de usar List<object>
é que estes dias mais código é escrito para usar as classes genéricas / interfaces. Eu suspeito que estes dias a maioria das pessoas iria escrever um método que leva um IList<object>
em vez de um IList
. Desde ArrayList
não implementa IList<object>
você não seria capaz de usar uma lista de matriz nestes cenários.
I tendem a pensar nos não-genéricos classes / interfaces como código legado e evitá-los sempre que possível.
Neste caso, ArrayList
vs. List<Object>
então você não vai notar qualquer diferença na velocidade. Pode haver algumas diferenças nos métodos de reais disponíveis em cada um deles, em particular no .NET 3.5 e métodos de extensão contagem, mas isso tem mais a ver com ArrayList sendo um pouco obsoleto que qualquer outra coisa.
Sim, além de ser typesafe, coleções genéricas pode ser realmente mais rápido.
A partir da MSDN ( http://msdn.microsoft. com / en-us / library / system.collections.generic.aspx )
O System.Collections.Generic namespace contém interfaces e classes que definem genérico coleções, que permitem aos usuários criar rigidez coleções que proporcionar uma melhor segurança de tipo e desempenho do que não-genérico fortemente coleções digitado.
Faça alguma avaliação comparativa e você vai saber o que funciona melhor. I guestimate que a diferença é muito pequena.
List <> é uma versão typesafe de ArrayList. Ele vai garantir que você vai obter o mesmo tipo de objeto na coleção.