¿Cuál es la mejor manera de obtener un valor de un ICollection? Sabemos que la Colección está vacía aparte de eso.C# ICollection obtener valor único
Respuesta
La forma más sencilla de hacer esto es:
foreach(object o in collection) {
return o;
}
Pero esto no es particularmente eficiente si en realidad es una colección genérica porque IEnumerator implementa IDisposable, por lo que el compilador tiene que poner en un try/finally, con una llamada Dispose() en el bloque finally.
Si se trata de una colección no genérica, o si conoce la colección genérica implementa nada en su método Dispose(), entonces el siguiente se puede utilizar:
IEnumerator en = collection.GetEnumerator();
en.MoveNext();
return en.Current;
Si sabe si puede aplicar IList, se puede hacer esto:
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;
}
del mismo modo, si lo más probable es que va a ser de un tipo determinado de su propia definición que tiene algún tipo de acceso indexado, puede utilizar la misma técnica.
Sin genéricos y debido ICollection
implementos IEnumerable
se puede hacer como en el ejemplo 1. Con los genéricos que sencilla necesidad de hacer como ejemplo 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, bebé, sí ...
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 se define en ICollection o IEnumerable (no genérico)? ¿Dónde? Lo que funcionaría sin embargo: myICollection.OfType
Es cierto, actualizado. Gracias. – Will
Esta es la respuesta correcta. First y FirstOrDefault incluso usan esa optimización IList internamente siempre que sea posible. –
.
collection.ToArray()[i]
De esta manera es lento, pero muy fácil de usar
- 1. Valor único Mysqli
- 2. Cómo obtener un valor único en una matriz multidimensional
- 3. Método en ICollection en C# que agrega todos los elementos de otra ICollection
- 4. Recuperando valor único usando JPA?
- 5. restricción único con valor definido
- 6. Agregar a una ICollection
- 7. ICollection vs ICollection <T> - La ambigüedad entre ICollection <T> .Count y ICollection.Count
- 8. Obtener valor de datarow en C#
- 9. Obtener valor de la búsqueda C#
- 10. Obtener valor de fila en Datatable C#
- 11. Actualizar un átomo con un único valor
- 12. Java Collection - clave única y valor único
- 13. Matplotlib - Gráfico de contorno con valor único
- 14. columna Compruebe si hay un valor único
- 15. Asignar valor único a múltiples variables
- 16. T en clase? AddRange ICollection?
- 17. ICollection <string> a la cadena []
- 18. Parámetros de función: IEnumerable, ICollection o array?
- 19. ¿Cómo obtener un identificador de JVM único?
- 20. PHP Obtener ruta de directorio único
- 21. EF4.1 POCO: Por qué debería usar ICollection
- 22. ¿Cómo puedo obtener un valor de recuento único de una base de datos con DBI?
- 23. ¿Cuál es la "mejor" forma de obtener y establecer un único valor de cookie mediante JavaScript?
- 24. Obtener un valor de bytes utilizando stringstream
- 25. Obtenga un valor único de dataSet en asp.net
- 26. Devolviendo un único valor con Linq a SQL
- 27. C# Expandir lista plana <T> al diccionario <T, ICollection <int>>
- 28. Visualizador de depuración para cualquier ICollection e ICollection <T> tipos
- 29. ¿Puedo obtener un TIMESTAMP único para cada registro en MySQL
- 30. Fuerza protobuf-net para ignorar interfaces IEnumerable/ICollection
ejemplo 2 no es correcto porque ICollection no implementa un único método(). –
Este es un método de extensión Linq. Eche un vistazo a msdn doc: http://msdn.microsoft.com/en-us/library/y2fx0ty0.aspx –