C# for loop
for classique
for (int i = 0; i < 5; i++)
{
Console.WriteLine($"i = {i}");
}
for avec décrémentation
for (int i = 5; i >= 0; i--)
{
Console.WriteLine($"i = {i}");
}
for avec pas personnalisé (i += 2)
for (int i = 0; i <= 10; i += 2)
{
Console.WriteLine($"i = {i}");
}
for sans initialisation
int k = 0;
for (; k < 3; k++)
{
Console.WriteLine($"k = {k}");
}
for sans condition (contrôlé par break)
for (int i = 0; ; i++)
{
if (i > 3) break;
Console.WriteLine($"i = {i}");
}
for sans incrémentation
for (int i = 0; i < 3;)
{
Console.WriteLine($"i = {i}");
i++; // incrémentation manuelle
}
for avec plusieurs variables
for (int i = 0, j = 6; i < j; i++, j--)
{
Console.WriteLine($"i = {i}, j = {j}");
}
for avec condition complexe
// La condition dépend à la fois d'un indice et d'une expression booléenne
// (ici simulée par une variable)
bool conditionExterne = true;
for (int i = 0; i < 3 && conditionExterne; i++)
{
Console.WriteLine($"i = {i} (conditionExterne={conditionExterne})");
if (i == 1) conditionExterne = false;
}
for imbriqués (nested)
for (int i = 0; i < 3; i++)
{
for (int j = 0; j < 2; j++)
{
Console.WriteLine($"(i, j) = ({i}, {j})");
}
}
for avec continue / break
for (int i = 0; i < 10; i++)
{
if (i == 2) continue; // saute l'itération 2
if (i == 5) break; // s'arrête à 5
Console.WriteLine($"i = {i}");
}
for avec goto (rare, déconseillé)
for (int i = 0; i < 5; i++)
{
if (i == 3) goto EndLoop;
Console.WriteLine($"i = {i}");
}
EndLoop:
Console.WriteLine("Boucle terminée via goto");
for avec async/await (dans Main async)
for (int i = 0; i < 3; i++)
{
await Task.Delay(200);
Console.WriteLine($"Async i = {i}");
}
for-like avec LINQ (simulation)
// Ce n'est pas un 'for' mais illustre un parcours style fonctionnel
Enumerable.Range(0, 5).ToList().ForEach(i => Console.WriteLine($"i = {i}"));
Console.WriteLine("\n===== 14) for avec Span<T> =====");
Span<int> numbers = stackalloc int[] { 1, 2, 3, 4, 5 };
for (int i = 0; i < numbers.Length; i++)
{
Console.WriteLine(numbers[i]);
}
for avec unsafe & pointeurs
UnsafePointerDemo();
private static unsafe void UnsafePointerDemo()
{
int[] arr = { 1, 2, 3 };
fixed (int* p = arr)
{
for (int i = 0; i < arr.Length; i++)
{
Console.WriteLine($"*(p + {i}) = {*(p + i)}");
}
}
}
for avec variables externes modifiées
int somme = 0;
for (int i = 0; i <= 5; i++)
{
somme += i; // accumulation
}
Console.WriteLine($"Somme 0..5 = {somme}");
for sur tableau / indexation
int[] arr = { 10, 20, 30, 40 };
for (int i = 0; i < arr.Length; i++)
{
Console.WriteLine($"arr[{i}] = {arr[i]}");
}
for avec vérifications et continue
for (int i = 0; i < 6; i++)
{
if (i % 2 == 1) continue; // garde uniquement pairs
Console.WriteLine($"pair: {i}");
}
for avec plusieurs expressions dans les sections
// On peut mettre des expressions multiples séparées par des virgules dans init et incrément
for (int i = 0, j = 0; i < 3; i++, j += 2)
{
Console.WriteLine($"i = {i}, j = {j}");
}
for infini contrôlé en interne
int compteur = 0;
for (;;)
{
if (compteur++ >= 3) break;
Console.WriteLine($"compteur = {compteur}");
}