Ersetzen von for... if
Array-Iterationen in C#
Wenn Sie ein Entwickler sind, der mit Arrays und Schleifen in C# gearbeitet hat, sind Sie möglicherweise auf eine Situation gestoßen, in der Sie ein Array durchlaufen und eine Transformation basierend auf einer Bedingung anwenden müssen. Obwohl einfache Iterationen mit foreach
intuitiv erscheinen mögen, führen sie oft zu weniger eleganten Lösungen. In diesem Beitrag werden wir die häufigen Fallstricke bei der Verwendung von foreach
mit Bedingungen untersuchen und robuste Alternativen anbieten, die Ihren Code vereinfachen können, ähnlich wie List Comprehensions in Python.
Das Problem mit foreach
Betrachten Sie die folgende foreach
Schleife, die Werte in einem Array basierend auf einer Bedingung inkrementiert:
foreach (int x in intArray)
if (x > 3) // allgemeine Bedingung für x
x++;
// andere Verarbeitung durchführen
Problempunkt
- Änderungsbeschränkung: Das Hauptproblem hier ist, dass die Inkrementierungsoperation auf
x
den Inhalt des ursprünglichen Arrays nicht ändert. Infolgedessen erreicht diese Methode nicht den gewünschten Effekt, die Werte inintArray
wie erwartet zu aktualisieren.
Verwendung einer traditionellen for
Schleife
Um die Inhalte des Arrays effektiv zu ändern, sollten Sie eine traditionelle for
Schleife verwenden. Hier ist, wie Sie es umsetzen können:
for(int i = 0; i < intArray.Length; ++i)
{
if(intArray[i] > 3)
++intArray[i];
}
Vorteile der for
Schleife
- Direkte Änderung: Dieser Ansatz ermöglicht es Ihnen, die Array-Elemente direkt zu ändern, was sicherstellt, dass alle Änderungen sofort innerhalb des Arrays wirksam werden.
- Flexibilität: Sie können den Index problemlos manipulieren und komplexere Logik nach Bedarf implementieren.
LINQ zur Transformation nutzen
LINQ (Language Integrated Query) kann ebenfalls Lösungen bieten, um durch Arrays zu iterieren, obwohl es mehr darauf ausgelegt ist, neue Sequenzen auf Basis bestehender zu erstellen, als diese vor Ort zu ändern. Hier sind ein paar Beispiele:
Verwendung von LINQ zur Datenumwandlung
Um ein neues transformiertes Array zu erstellen, können Sie LINQ wie folgt anwenden:
var newArray1 = from i in intArray select ((i > 3) ? (i + 1) : (i));
var newArray2 = intArray.Select(i => (i > 3) ? (i + 1) : (i));
Beispiel mit where
Klausel
Wenn Sie Elemente unterhalb eines bestimmten Schwellenwerts herausfiltern und ein neues Array erstellen möchten, können Sie Folgendes tun:
var intArray = new int[] { 10, 1, 20, 2 };
var newArray = from i in intArray where i > 3 select i + 1;
// newArray == { 11, 21 }
Zu Beachten
- Neue Sequenzen erstellen: Denken Sie daran, dass LINQ nicht für die Modifikation bestehender Sammlungen gedacht ist, sondern für die Erstellung neuer Sequenzen basierend auf Transformationen oder Filtern.
Verwendung der ForEach
Methode
Für Arrays bietet C# auch die ForEach
Methode, die es Ihnen ermöglicht, eine Lambda-Funktion für einfachere Aktionen zu verwenden:
intArray.ForEach(i => DoSomething(i));
Überlegungen
- Wann man
ForEach
verwenden sollte: Diese Methode funktioniert gut, um einen Block von Code für jedes Element auszuführen, ist jedoch möglicherweise nicht so vielseitig wie eineforeach
oderfor
Schleife für komplexere Operationen.
Fazit
Zusammenfassend lässt sich sagen, dass die foreach
Schleife zwar attraktiv für die Iteration durch Arrays in C# aussieht, die Verwendung einer traditionellen for
Schleife bei der direkten Modifizierung von Elementen weitaus praktischer ist. Erforschen Sie LINQ zur Erstellung neuer Sequenzen basierend auf Bedingungen und ziehen Sie in Betracht, die ForEach
Methode für vereinfachte Operationen auf Sammlungen zu verwenden. Diese Alternativen helfen Ihnen, sauberen, besser lesbaren und effektiven C#-Code zu schreiben.
Indem Sie die Fähigkeiten und Einschränkungen jedes Konstrukts verstehen, sind Sie besser gerüstet, das richtige Werkzeug für Ihre Programmieraufgaben in Zukunft auszuwählen.