Junior
Quels types d'objets peut-on utiliser dans une boucle foreach en C#?
sobes.tech IA
Réponse de l'IA
Dans la boucle foreach en C#, vous pouvez utiliser n'importe quel type d'objet qui implémente l'une des interfaces suivantes :
System.Collections.IEnumerable- Pour les collections non génériques. Fournit un itérateur non génériqueIEnumerator.System.Collections.Generic.IEnumerable<T>- Pour les collections génériques. Fournit un itérateur génériqueIEnumerator<T>.
Une classe ou une structure peut également être utilisée dans foreach si elle possède une méthode publique GetEnumerator(), qui retourne une instance d'une classe ou structure implémentant la signature suivante (appelé foreach basé sur le pattern) :
- Propriété publique
Current, qui retourne n'importe quel type. - Méthode publique
MoveNext(), qui retourne un booléen. - Optionnellement, une méthode publique
Dispose()(pour libérer correctement les ressources lors de l'utilisation deusing).
Exemples de types intégrés pouvant être utilisés :
- Tableaux (
int[],string[], etc.) - Collections du namespace
System.Collections:ArrayList,Hashtable,Queue,Stack. - Collections du namespace
System.Collections.Generic:List<T>,Dictionary<TKey, TValue>,HashSet<T>,Queue<T>,Stack<T>. - Chaînes (
string) - qui sont des séquences de caractèreschar.
Exemple d'un type personnalisé supportant foreach selon le pattern :
// Type personnalisé simple supportant foreach
public class MyEnumerable
{
private int[] data = { 1, 2, 3, 4, 5 };
// Méthode GetEnumerator supportant foreach selon le pattern
public MyEnumerator GetEnumerator()
{
return new MyEnumerator(data);
}
// Classe interne de l'énumérateur
public class MyEnumerator
{
private int[] data;
private int currentIndex = -1;
public MyEnumerator(int[] data)
{
this.data = data;
}
// Propriété Current
public int Current => data[currentIndex];
// Méthode MoveNext
public bool MoveNext()
{
currentIndex++;
return currentIndex < data.Length;
}
// Méthode Dispose (optionnelle)
public void Dispose()
{
// Libération des ressources si nécessaire
}
}
}
// Utilisation dans foreach
// var collection = new MyEnumerable();
// foreach (var item in collection)
// {
// // Console.WriteLine(item);
// }