Raccourci pour créer seul élément de la liste en C#
En C#, est-il une ligne de raccourci pour instancier une Liste<T> avec un seul élément.
Je suis actuellement en train de faire:
new List<string>( new string[] { "title" } ))
Avoir ce code partout réduit la lisibilité. J'ai pensé à l'aide d'un utilitaire méthode comme ceci:
public static List<T> SingleItemList<T>( T value )
{
return (new List<T>( new T[] { value } ));
}
Si je pouvais faire:
SingleItemList("title");
Est-il plus court /moyen le plus propre?
Grâce.
Vous devez vous connecter pour publier un commentaire.
Simplement utiliser ce:
Vous pouvez omettre l' () accolades:
Mise à jour: bien sûr, cela fonctionne aussi pour les plus d'une entrée:
Très similaire à ce que d'autres ont posté, sauf qu'il fait certain de n'allouer de l'espace pour le seul élément à l'origine.
Bien sûr, si vous savez que vous allez être l'ajout d'un tas de trucs plus tard, il peut ne pas être une bonne idée, mais il vaut la peine de mentionner une fois.
Michael idée d'utiliser des méthodes d'extension conduit à quelque chose d'encore plus simple:
De sorte que vous pourriez faire ceci:
Je ne suis pas sûr de savoir si je l'aime ou pas, que vous avez l'esprit...
Une autre réponse à ma précédente, en fonction de l'exposition à la Google Java Collections:
Alors:
Je vous conseille de vérifier la GJC - il a beaucoup de choses intéressantes dans. (Personnellement, je préfère ignorer les "alpha" tag - c'est seulement la version open source qui est "alpha" et il est basé sur une très stable et très utilisé interne de l'API.)
Utiliser une extension de la méthode avec la méthode de chaînage.
Cela vous permettrait de faire ceci:
ou
Mise à jour
Vous pouvez maintenant utiliser la liste des initialiseurs:
Voir http://msdn.microsoft.com/en-us/library/bb384062(v=vs. 90).aspx
new List<string> {"Yes"}
à être mieux... ?C'est plus courte que
et vous n'avez pas à spécifier le type.
Encore une autre façon, trouvé sur C#/.Net petites merveilles:
Je voudrais juste faire
Pour un seul élément énumérable en java, il serait Collections.singleton("chaîne");
En c#, cela va être plus efficace que la nouvelle Liste:
mais est-il une façon plus simple en utilisant le framework?
J'ai un peu de fonction:
Car il ne pas prescrire un béton de type de retour c'est tellement générique que je l'utilise tous sur la place. Votre code devrait ressembler à
Mais bien sûr, il permet aussi
J'ai souvent l'utiliser quand j'ai à ajouter/ajouter un élément à la sortie d'une LINQ déclaration. Par exemple, pour ajouter un élément vide à une liste de sélection:
Permet d'économiser quelques
ToList()
etAdd
consolidés.(Réponse tardive, mais je suis tombé sur cette oldie et pensé que ce pourrait être utile)
Vous pouvez également faire
Essayer var
Inspiré par les autres réponses (et donc je peux le ramasser à chaque fois que j'en ai besoin!), mais avec de nommage/style aligné avec F# (qui a une norme
singleton
fonction par la structure de données*):* sauf pour
ResizeArray
lui-même, bien sûr, d'où cette question 🙂Dans la pratique, je fait nom il
Create
à s'aligner avec d'autres aides que je définir commeTuple.Créer
,Lazy.Create
[2],LazyTask.Créer
etc:[2]
Lazy
extension dansSystem
est queLazy
lui-même est enSystem
[et doncCreate
apparaissent dans les compleiton listes sansusing
]. Il n'y a rien à gagner de forcer les gens àopen
un diff de l'espace de noms? Faire autre chose privée n'était pas intentionnel; fixe