tratto con un quadro su base giornaliera dove a volte fornendo metodi che accettano IEnumerable<MyBusinessObject>
come parametro per mostrare interfacce utente, eseguire calcoli eccArray.ToArray <>() restituisce l'array originale se è dello stesso tipo?
Se passo in un array di MyBusinessObject
questo modo:
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
}
}
Condivide la linea di objs.ToArray()
semplicemente risolvere il IEnumerable<MyBusinessObject>
torna alla matrice originale, o lo fa copiarlo ad un nuovo array, pronto per l'uso?
Non sono sicuro se questa dovrebbe essere un'altra domanda, ma volevo solo vedere rapidamente se lo sapete anche voi: 'IEnumerable .Count()' chiama la proprietà '.Length' dell'array per ottenere un risultato, o fa qualcosa di orribilmente inefficiente? –
Codesleuth
Devo inchinarmi al signor Skeet per quello. Personalmente, scommetto che non lo è (IEnumerable non ha una proprietà Length). Tuttavia c'è una possibilità che faccia qualche riflessione intelligente per determinati scenari come un'ottimizzazione. Il punto è, se si desidera un conteggio, IEnumerable non è appropriato - è il numero di IList. –
@Codesleuth: guardando [il codice sorgente] (http://referencesource.microsoft.com/#System.Core/System/Linq/Enumerable.cs), il metodo 'Count' verifica se l'oggetto implementa' ICollection ' o 'ICollection' (che fa un array) e usa la sua proprietà' Count' invece di scorrere gli oggetti. –
Guffa