Je suis plutôt dans le camp de simplement en utilisant une Liste directement, à moins que pour une raison que j'ai besoin d'encapsuler les données de structure et de fournir un sous-ensemble limité de ses fonctionnalités. C'est principalement parce que si je n'ai pas un besoin spécifique pour l'encapsulation, puis de le faire est juste une perte de temps.
Cependant, avec le total des initialise fonctionnalité de C# 3.0, il ya quelques nouvelles situations où je préconiserais de l'aide personnalisé de la collection de classes.
Fondamentalement, C# 3.0 permet à toute classe qui implémente IEnumerable
et a une extension de la méthode à utiliser le nouvel agrégat syntaxe d'initialiseur. Par exemple, parce que le Dictionnaire définit une méthode Add(K key, V valeur), il est possible d'initialiser un dictionnaire à l'aide de cette syntaxe:
var d = new Dictionary<string, int>
{
{"hello", 0},
{"the answer to life the universe and everything is:", 42}
};
La grande chose à propos de la fonctionnalité est que cela fonctionne pour ajouter des méthodes avec un nombre quelconque d'arguments. Par exemple, compte tenu de cette collection:
class c1 : IEnumerable
{
void Add(int x1, int x2, int x3)
{
//...
}
//...
}
il serait possible de les initialiser comme suit:
var x = new c1
{
{1,2,3},
{4,5,6}
}
Cela peut être très utile si vous avez besoin pour créer des tableaux statiques d'objets complexes. Par exemple, si vous utilisiez List<Customer>
, et que vous vouliez créer une liste statique des objets de client, vous devez le créer comme ceci:
var x = new List<Customer>
{
new Customer("Scott Wisniewski", "555-555-5555", "Seattle", "WA"),
new Customer("John Doe", "555-555-1234", "Los Angeles", "CA"),
new Customer("Michael Scott", "555-555-8769", "Scranton PA"),
new Customer("Ali G", "", "Staines", "UK")
}
Toutefois, si vous utilisez une collection personnalisée, comme celui-ci:
class CustomerList : List<Customer>
{
public void Add(string name, string phoneNumber, string city, string stateOrCountry)
{
Add(new Customer(name, phoneNumber, city, stateOrCounter));
}
}
Vous pouvez initialiser la collection en utilisant cette syntaxe:
var customers = new CustomerList
{
{"Scott Wisniewski", "555-555-5555", "Seattle", "WA"},
{"John Doe", "555-555-1234", "Los Angeles", "CA"},
{"Michael Scott", "555-555-8769", "Scranton PA"},
{"Ali G", "", "Staines", "UK"}
}
Ceci a l'avantage d'être à la fois facile et plus facile à lire parce que leur est pas nécessaire de retaper le type d'élément que le nom de chaque élément. L'avantage peut être particulièrement forte si l'élément est de type long ou complexe.
Cela dit, ce n'est utile que si vous avez besoin d'statique des collections de données définies dans votre application. Certains types d'applications, tels que les compilateurs, les utiliser tout le temps. D'autres, comme typique de la base de données des applications n'est pas parce qu'ils chargent l'ensemble de leurs données à partir d'une base de données.
Mon conseil serait que si vous avez besoin de définir une statique de la collection d'objets, ou de la nécessité d'encapsulation à l'écart de la collection de l'interface, puis de créer une classe de collection personnalisée. Sinon, je voudrais juste utiliser List<T>
directement.