Voglio solo sapere se c'è un foreach oneliner in C#, come il se oneliner (exp) ? then : else
.C# è disponibile un oneliner foreach?
risposta
Se hai a che fare con una serie quindi è possibile utilizzare il metodo statico ForEach
built-in:
Array.ForEach(yourArray, x => Console.WriteLine(x));
Se hai a che fare con una List<T>
quindi è possibile utilizzare il metodo built-in ForEach
esempio :
yourList.ForEach(x => Console.WriteLine(x));
Non c'è niente di built-in che ti lavorare contro ogni arbitraria sequenza IEnumerable<T>
, ma è abbastanza facile da rotolare il proprio metodo di estensione se si sente che hai bisogno:
yourSequence.ForEach(x => Console.WriteLine(x));
// ...
public static class EnumerableExtensions
{
public static void ForEach<T>(this IEnumerable<T> source, Action<T> action)
{
if (source == null) throw new ArgumentNullException("source");
if (action == null) throw new ArgumentNullException("action");
foreach (T item in source)
{
action(item);
}
}
}
foreach
linea battute potrebbero essere ottenuti con metodi di estensione LINQ. Per esempio:
invece di:
var result = new List<string>();
foreach (var item in someCollection)
{
result.Add(item.Title);
}
si potrebbe:
var result = someCollection.Select(x => x.Title).ToList();
Certo, si può usare qualcosa come List<>::ForEach
:
List<String> s = new List<string>();
s.Add("These");
s.Add("Is");
s.Add("Some");
s.Add("Data");
s.ForEach(_string => Console.WriteLine(_string));
La differenza principale tra se e l'operatore ? è che se è una dichiarazione mentre "?" produce un'espressione. Cioè Non si può fare questo:
var _ = (exp) ? then : else; // ok
ma non questa:
var _ = if (exp) { then; } else { else; }; // error
Quindi, se siete alla ricerca di qualcosa di simile espressione foreach non c'è nessun tipo di .NET si può naturalmente tornare ad eccezione di vuoto, ma non ci sono valori di tipo void, in modo da poter ugualmente solo scrivere:
foreach (var item in collection) process(item);
In molti linguaggi funzionali un tipo di unità viene utilizzato al posto del vuoto che è di tipo con un solo valore. È possibile emulare questa in .NET e creare il proprio espressione foreach:
class Unit
{
public override bool Equals(object obj)
{
return true;
}
public override int GetHashCode()
{
return 0;
}
}
public static class EnumerableEx
{
public static Unit ForEach<TSource>(
this IEnumerable<TSource> source,
Action<TSource> action)
{
foreach (var item in source)
{
action(item);
}
return new Unit();
}
}
V'è però praticamente non esiste alcun caso d'uso di tali espressioni.
- 1. SQL-injection: questo (oneliner) è sicuro?
- 2. Quale parte del linguaggio C# è .ForEach()?
- 3. È disponibile un framework chatbot?
- 4. Oneliner per stampare una stringa in esadecimale?
- 5. C# Azione in Foreach
- 6. C# `comportamento foreach` - Chiarimento?
- 7. Riavvia un ciclo foreach in C#?
- 8. È disponibile un hook paredit Emacs per ridefinire C-j?
- 9. Determina quando è disponibile un servizio web
- 10. Java oneliner per la lista di pulizia
- 11. Preprocessore Objective-C disponibile?
- 12. C# string.replace nel ciclo foreach
- 13. C++ make_shared non disponibile
- 14. C# Groupby Linq e foreach
- 15. Enum in C# e foreach
- 16. LabelFor() in un foreach
- 17. foreach in C++ int array
- 18. Perché il ciclo foreach è di sola lettura in C#
- 19. L'attivatore `.sbt.ivy.lock` non è disponibile
- 20. È disponibile un foglio trucchi WPF?
- 21. Verifica se è disponibile un modulo node.js
- 22. È disponibile un convertitore Markdown-to-WikiMarkup?
- 23. È disponibile un repository GIT di test?
- 24. È disponibile un server OpenID python?
- 25. Verifica se un video è disponibile
- 26. Perché il Korn oneliner del 1987 stampa unix?
- 27. 'stringByAppendingPathComponent' non è disponibile
- 28. UIControlState.Normal non è disponibile
- 29. Controlla se il dominio è disponibile per l'acquisto - C#
- 30. È disponibile un'astrazione di tipo `django model` per C++?
Abbastanza strano che non abbiano questa roba incorporata. Credo che se si seguirebbe il pattern Python, si userebbe 'Select' per costruire una nuova enumerazione? – Domi