trato con un marco a diario en el que a veces proporcionan métodos que aceptan IEnumerable<MyBusinessObject>
como un parámetro con el fin de mostrar las interfaces de usuario, realizar cálculos etc.¿Array.ToArray <>() devuelve la matriz original si es del mismo tipo?
Si paso en una serie de MyBusinessObject
así:
MyBusinessObject[] myArray = new MyBusinessObject { obj1, obj2, ..., objN };
frameworkClass.MyMethod(myArray);
....
public class FrameworkClass
{
public void MyMethod(IEnumerable<MyBusinessObject> objs)
{
// Other code that uses the enumerable
MyBusinessObject[] objectArray = objs.ToArray();
// More code that uses the enumerable
}
}
¿la línea de objs.ToArray()
simplemente resuelve el IEnumerable<MyBusinessObject>
de nuevo a la matriz original, o tiene copiarlo en una gama completamente nueva, lista para su uso?
No estoy seguro si esta debería ser otra pregunta, pero solo quería ver rápidamente si usted también lo sabe: '' IEnumerable .Count() 'llama a la propiedad' .Length' de la matriz para obtener un resultado, o hace algo terriblemente ineficiente? –
Codesleuth
Tiene que inclinarse ante Mr Skeet por eso. Personalmente, apuesto a que no (IEnumerable no tiene una propiedad de longitud). Sin embargo, existe la posibilidad de que haga algunas reflexiones inteligentes para ciertos escenarios como una optimización. El punto es, si quieres un conteo, IEnumerable no es apropiado - IList es. –
@Codesleuth: mirando [el código fuente] (http://referencesource.microsoft.com/#System.Core/System/Linq/Enumerable.cs), el método 'Count' verifica si el objeto implementa' ICollection ' o 'ICollection' (que hace una matriz) y usa su propiedad' Count' en lugar de recorrer los elementos. –
Guffa