Quelle est la meilleure façon d'obtenir une valeur à partir d'ICollection? Nous savons que la collection est vide à part ça.C# ICollection obtenir une seule valeur
Répondre
La façon la plus simple de le faire est:
foreach(object o in collection) {
return o;
}
Mais ce n'est pas particulièrement efficace si elle est en fait une collection générique parce que IEnumerator implémente IDisposable, de sorte que le compilateur doit mettre dans un try/finally, avec un appel Dispose() dans le bloc finally.
Si c'est une collection non générique, ou si vous connaissez la collection générique met en œuvre rien dans sa méthode Dispose(), puis les éléments suivants peuvent être utilisés:
IEnumerator en = collection.GetEnumerator();
en.MoveNext();
return en.Current;
Si vous savez si peut mettre en œuvre IList, vous peut faire:
IList iList = collection as IList;
if (iList != null) {
// Implements IList, so can use indexer
return iList[0];
}
// Use the slower way
foreach (object o in collection) {
return o;
}
de même, s'il est probable que ce sera d'un certain type de votre propre définition qui a une sorte d'accès indexé, vous pouvez utiliser la même technique.
Sans génériques et parce que ICollection
met en œuvre IEnumerable
vous pouvez faire comme dans l'exemple 1. Avec les médicaments génériques dont vous avez besoin simple comme par exemple 2:
List<string> l = new List<string>();
l.Add("astring");
ICollection col1 = (ICollection)l;
ICollection<string> col2 = (ICollection<string>)l;
//example 1
IEnumerator e1 = col1.GetEnumerator();
if (e1.MoveNext())
Console.WriteLine(e1.Current);
//example 2
if (col2.Count != 0)
Console.WriteLine(col2.Single());
Linq, bébé, ouais ...
var foo = myICollection.OfType<YourType>().FirstOrDefault();
// or use a query
var bar = (from x in myICollection.OfType<YourType>() where x.SomeProperty == someValue select x)
.FirstOrDefault();
FirstOrDefault est défini sur ICollection ou IEnumerable (non générique)? Où? Ce qui fonctionnerait bien: myICollection.OfType
Vrai, mis à jour. Merci. – Will
C'est la bonne réponse. First et FirstOrDefault utilisent même cette optimisation IList en interne lorsque cela est possible. –
.
collection.ToArray()[i]
De cette façon est lent, mais très simple à utiliser
- 1. ICollection, collections en lecture seule et synchronisation. Est-ce correct?
- 2. C#: Valeur Obtenir par réflexion
- 3. ASP.NET: ICollection, constructeur introuvable?
- 4. Comment obtenir une valeur d'un service Web XML en C#?
- 5. Renvoyer une seule valeur avec Linq to SQL
- 6. C# ListView Detail, Sélectionnez une seule cellule
- 7. ICollection <string> à la chaîne []
- 8. C#: Attribuer la même valeur à plusieurs variables dans une seule instruction
- 9. Comment obtenir la valeur CMJN pour une valeur PMS donnée?
- 10. Comment obtenir un Flex AdvancedDatagrid pour afficher une seule ligne?
- 11. SQLite - comment obtenir une valeur moyenne?
- 12. Comment obtenir une valeur générée automatiquement?
- 13. fichiers batch: obtenir une valeur de chaîne
- 14. Comment obtenir une valeur unique parmi plusieurs options sélectionnables?
- 15. Quelle est la "méthode ruby" pour analyser une chaîne pour une seule clé/valeur?
- 16. retourner la valeur dans une pile - C++
- 17. WCG WebGet et ICollection <>
- 18. « Lecture seule » propriété accesseur en C#
- 19. Pourquoi ArrayList implémente IList, ICollection, IEnumerable?
- 20. Obtenir la valeur de Row dans Datatable C#
- 21. Windows C# -Comment obtenir la valeur Enum de ComboBox
- 22. C# + Crystal Reports + Sélectionnez expert pour une seule boîte?
- 23. SQL: Obtenir la valeur à l'index dans la valeur binaire
- 24. Comment obtenir une référence à une ligne de table avec une valeur spécifique dans jQuery
- 25. Obtenir une valeur de fichier de configuration Spring directement
- 26. Comment injecter une seule valeur de propriété dans une chaîne en utilisant spring 2.5.x?
- 27. Est-ce que iBATIS.NET peut fonctionner avec ICollection?
- 28. Puis-je mettre une seule citation dans un attribut JQuery égal à selector ([attribut = valeur])?
- 29. Tween une valeur dans iPhone objectif-C
- 30. Comment puis-je obtenir une valeur à partir d'un CheckBoxColumn en utilisant C# 3.0?
exemple 2 est pas juste parce que ICollection ne met pas en oeuvre méthode unique(). –
Ceci est une méthode d'extension Linq. Jetez un oeil à msdn doc: http://msdn.microsoft.com/en-us/library/y2fx0ty0.aspx –