Ho uno List
che contiene tutti i nomi di database. Devo visualizzare gli elementi contenuti in tale elenco nella Console (utilizzando Console.WriteLine()
). Come posso raggiungere questo obiettivo?Come visualizzare gli elementi di elenco nella finestra della console in C#
risposta
Supponendo che gli elementi ignorare ToString
in modo appropriato:
public void WriteToConsole(IEnumerable items)
{
foreach (object o in items)
{
Console.WriteLine(o);
}
}
(Non ci sarebbe alcun vantaggio nell'utilizzo di farmaci generici in questo ciclo - saremmo finiti chiamare Console.WriteLine(object)
comunque, quindi sarebbe comunque box così come avviene nella parte foreach
in questo caso.)
MODIFICA: le risposte utilizzando sono molto buone.
mio ciclo precedente è più flessibile nel caso in cui si dispone di una sequenza arbitraria (ad esempio come il risultato di un'espressione LINQ), ma se è sicuramente una List<T>
direi che è una scelta migliore.
Un vantaggio di è che se si dispone di un tipo di lista concreta, verrà utilizzato il sovraccarico più appropriato. Per esempio:
List<int> integers = new List<int> { 1, 2, 3 };
List<string> strings = new List<string> { "a", "b", "c" };
integers.ForEach(Console.WriteLine);
strings.ForEach(Console.WriteLine);
Quando si scrive i numeri interi, questo utilizzerà Console.WriteLine(int)
, mentre quando scrive le stringhe userà Console.WriteLine(string)
. Se non è disponibile un sovraccarico specifico (o se si sta utilizzando solo un generico List<T>
e il compilatore non sa cosa sia T
) utilizzerà Console.WriteLine(object)
.
Si noti l'uso di Console.WriteLine
come un metodo di gruppo, a proposito. Questo è più conciso rispetto all'utilizzo di un'espressione lambda e in realtà leggermente più efficiente (poiché il delegato sarà solo una chiamata a Console.WriteLine
, anziché una chiamata a un metodo che a sua volta chiama solo Console.WriteLine
).
È inoltre possibile utilizzare foreach integrato di List, come ad esempio:
List<T>.ForEach(item => Console.Write(item));
Questo codice viene eseguito anche in modo significativo
più veloce!
Il codice di cui sopra rende anche in grado di manipolare Console.WriteLine, come ad esempio fare:
List<T>.ForEach(item => Console.Write(item + ",")); //Put a,b etc.
* Significativamente * più veloce? Mi sembra molto improbabile, dato che il collo di bottiglia sarà l'output della console piuttosto che il loop. –
haha Posso togliere quella parola. È solo perché List
Sì - è certamente più efficiente, ma non significativamente. Vale sempre la pena di ricordare dove sono realmente i colli di bottiglia :) Puoi rendere la prima versione ancora più efficiente usando Console.Write come un gruppo di metodi, btw ... (Non puoi farlo con il secondo, dato che sei effettivamente manipolando il parametro.) –
si può effettivamente fare è piuttosto semplice, dal momento che la lista ha un metodo ForEach
e dal momento che è possibile passare in Console.WriteLine
come un gruppo di metodi. Il compilatore utilizzerà quindi una conversione implicita per convertire il gruppo metodo, in questo caso, un Action<int>
e scegliere il metodo più specifico dal gruppo, in questo caso `Console.WriteLine (int):
var list = new List<int>(Enumerable.Range(0, 50));
list.ForEach(Console.WriteLine);
Opere anche con stringhe =)
Per essere assolutamente pedante (e non sto suggerendo una modifica alla risposta - solo commenti per motivi di interesse) "Console.WriteLine" è un gruppo di metodi. Il compilatore utilizza quindi una conversione implicita dal gruppo metodo ad Action, selezionando il metodo più specifico (Console.WriteLine (int) in questo caso).
Per essere assolutamente pedante (e non sto suggerendo una modifica alla tua risposta - solo commenti per motivi di interesse) "Console.WriteLine" è un gruppo di metodi. Il compilatore utilizza quindi una conversione implicita dal gruppo metodo all'azione
Sì, come ho detto, "se ho ottenuto il mio testo corretto": p Aggiornamento della risposta (fammi sapere se ho sbagliato di nuovo!) – Svish
Console.WriteLine(string.Join<TYPE>("\n", someObjectList));
Questo ha funzionato meglio per me in quanto posso preparare la mia stringa prima di inviarlo alla console , invece di inviare una riga alla console ogni volta – Mart10
Mentre le risposte con sono molto buone.
Ho trovato il metodo String.Join<T>(string separator, IEnumerable<T> values)
più utile.
Esempio:
List<string> numbersStrLst = new List<string>
{ "One", "Two", "Three","Four","Five"};
Console.WriteLine(String.Join(", ", numbersStrLst));//Output:"One, Two, Three, Four, Five"
int[] numbersIntAry = new int[] {1, 2, 3, 4, 5};
Console.WriteLine(String.Join("; ", numbersIntAry));//Output:"1; 2; 3; 4; 5"
Osservazioni:
Se separatore è nullo, una stringa vuota (String.Empty
) viene usato preferibilmente. Se qualsiasi membro dei valori è null, viene utilizzata una stringa vuota.
Join(String, IEnumerable<String>)
è un metodo comodo che permette di concatenare ogni elemento in un IEnumerable (Of String) collezione senza prima convertire gli elementi per un array di stringhe. È particolarmente utile con le espressioni di query Language-Integrated Query (LINQ).
Questo dovrebbe funzionare bene per il problema, mentre per gli altri, con valori di array. Utilizzare altri sovraccarichi di questo stesso metodo, String.Join Method (String, Object[])
Riferimento: https://msdn.microsoft.com/en-us/library/dd783876(v=vs.110).aspx
Ho trovato questo più facile da capire:
List<string> names = new List<string> { "One", "Two", "Three", "Four", "Five" };
for (int i = 0; i < names.Count; i++)
{
Console.WriteLine(names[i]);
}
- 1. Pixel C++ nella finestra della console
- 2. Come visualizzare gli elementi nella tela attraverso il binding
- 3. In looping di tutti gli elementi nell'oggetto della finestra
- 4. Posizione della finestra di Visual Studio Console
- 5. Come mettere gli elementi di elenco nella parte inferiore della visualizzazione elenco in Cassetto di navigazione come Foursquare
- 6. Come lasciare la modalità browser R() nella finestra della console?
- 7. Nascondi la finestra della console nell'applicazione console C#
- 8. Come visualizzare l'intera cronologia della console di Rails?
- 9. Visualizzare solo gli elementi della lista più vicini
- 10. Impossibile visualizzare gli elementi di AlertDialog
- 11. Come visualizzare le variabili nella finestra Taglist in vim
- 12. GCC/C come nascondere la finestra della console?
- 13. Disabilita visualizzazione della finestra della console
- 14. C++ Come posso nascondere una finestra della console all'avvio?
- 15. c finestra della finestra titolo
- 16. Come impostare una finestra dell'applicazione della console come la finestra più in alto (C#)?
- 17. Verificare se l'utente sta digitando nella finestra della console
- 18. nascondi la finestra della console di un programma C
- 19. Come posso nascondere una finestra della console?
- 20. . Applicazione console non in grado di visualizzare una console
- 21. : come lasciare la finestra aperta della console
- 22. Formatta tutti gli elementi di un elenco
- 23. Gradle: come visualizzare i risultati di AndroidTest nella console?
- 24. Come visualizzare la console Maven in IntelliJ?
- 25. Come mantenere aperta la finestra della console
- 26. Come stampare nella finestra di output di C++ Builder
- 27. Come visualizzare gli elementi in due colonne in un ListView
- 28. Come posso visualizzare più decimali nella console di uscita?
- 29. Ordina gli elementi della casella di riepilogo in C#
- 30. Come è possibile generare dinamicamente gli elementi di elenco in un elenco non ordinato in ASP.NET?
Come usare questo per tipi di oggetti complessi dicono Lista dove persona contiene solo le proprietà di stringa . –
Koder101
@ Koder101: Probabilmente vorrai sovrascrivere 'ToString' in' Person'. –