Glengamoi (Forum) · AspHeute · .NET Heute (RSS-Suche) · AspxFiles (Wiki) · .NET Blogs

Schleifenbefehle in C#

Geschrieben von: Christoph Wille
Kategorie: C#

This printed page brought to you by AlphaSierraPapa

Im heutigen Artikel befassen wir uns mit den Schleifenbefehlen von C#: for, while und do. Wie im letzten Artikel Kontrollstatements in C# werde ich die Unterschiede zu VBScript herausarbeiten.

Voraussetzung um den Sourcecode dieses Artikels verwenden zu können ist eine Installation des Microsoft .NET Framework SDK's auf einem Webserver. Weiters setze ich voraus, daß der Leser bereits eine Programmiersprache beherrscht - deshalb ist die Information auch in sehr komprimierter Form gehalten.

Das for Statement

Unter VBScript ist das For Statement sehr einfach gestrickt:

For Laufvariable=Startwert To Endwert
...
Next

Man hat eine Laufvariable (die auf Startwert initialisiert wird), eine Endbedingung (<=Endwert) und die Statements, die in der Schleife ausgeführt werden sollen. Im Bestfall kann man noch mit Step die Erhöhung der Laufvariable beeinflussen.

Da C# von C++ so einiges geerbt hat, sieht die for Schleife auch sehr C++ like aus (kurz, prägnant):

for (Laufvariable=Startwert; Endbedingung; Erhöhung Laufvariable)
{
}

Um das Ganze gleich mit Leben zu erfüllen, habe ich das berühmte Hello World Beispiel ein bischen umgebaut:

<% @Page Language="C#" %>
<%
for (int i=1;i<=5;i++)
{
%>
<font size="<%=i%>">Hello World!</font><br>
<%
}
%>

Was passiert in diesem Code? In der for Schleife darf man Variablen deklarieren (die Variable i), und ich habe davon natürlich Gebrauch gemacht. Der Startwert wird zugewiesen, die Endbedingung definiert (Schleife ausführen, solange i kleiner oder gleich 5 ist). Und nach jedem Durchlauf wird i um eins erhöht:

i++;

Das ist äquivalent zu

i=i+1;

Der Operator ++ heißt Inkrementoperator, und erhöht Variablen um 1. Natürlich gibt es auch den Dekrementoperator (--). Diese, als auch andere "verkürzte" Operatoren sind aus C++ vererbt worden.

Der Output des for Loops sieht wie folgt aus:

Man kann zwar noch einiges mehr mit dem for Loop anstellen, aber das was ich hier vorgestellt habe, reicht um die meisten Anwendungen programmieren zu können. Wer mehr wissen möchte, den darf ich an mein Buch, Presenting C#, verweisen (Link am Ende des Artikels).

Das while Statement

Ebenfalls ein alter Bekannter von VBScript ist das While Statement:

While (Boolscher Ausdruck)
...
Wend

In C# sieht das Ganze nicht wirklich viel anders aus:

while (Boolscher Ausdruck)
{
}

Auf unser kleines Hello World Beispiel angewendet, könnte der Sourcecode mit der while Schleife wie folgt aussehen:

<% @Page Language="C#" %>
<%
int nHellos = 0;
while (5 > nHellos++)
{
  Response.Write("<font size=\"");
  Response.Write(nHellos.ToString());
  Response.Write("\">Hello World!</font><br>");
}
%>

Der Output ist der Gleiche wie für den for Loop, allerdings habe ich diesmal nicht HTML mit ASP.NET Code gemischt, sondern alles über C# ausgeben lassen. In diesem Beispiel wird deutlich, daß man mit Datentypen nicht "herumwurschteln" kann: Response.Write nimmt nur eine String Variable, und basta. Man muß also vorher konvertieren. Ebenso geändert im Vergleich zu VBScript ist wie man ein Hochkomma in einen String einbaut: nicht durch ein doppeltes Hochkomma "", sondern durch \".

Das do Statement

Nun zum letzten Schleifenstatement, das ich in diesem Artikel behandeln möchte: das Do Statement. In VBScript gibt es 2 Varianten:

Do
...
Loop While(Boolscher Ausdruck)

Do
...
Loop Until(Boolscher Ausdruck)

Die Do Schleife läuft entweder solange ein Ausdruck True ist (While), oder bis ein Ausdruck zu True wird (Until). Beiden gemeinsam ist allerdings, daß die Statements in der Schleife minimal einmal ausgeführt werden.

In C# im Gegensatz dazu gibt es nur eine do Variante:

do
{
}
while (Boolscher Ausdruck);

Wieder auf unser Beispiel angewendet, könnte eine Lösung so aussehen:

<% @Page Language="C#" %>
<%
bool bExitDoLoop = false;
int nHellos = 0;
string strTempString;

do
{
  nHellos++;
  strTempString = "<font size=\"" + nHellos.ToString() + 
          [line continued]"\">Hello World!</font><br>";
  Response.Write(strTempString);
  if (5 == nHellos) bExitDoLoop = true;
}
while (! bExitDoLoop);
%>

Zugegebenermaßen hätte ich die Laufbedingung auch auf nHellos <= 5 setzen können, anstatt mit einer boolschen Variable und einer if Abfrage herumzuspielen - aber ich wollte noch den Negierungsoperator Rufzeichen (!) demonstrieren. Dieser ist das Äquivalent zu VBScript's Not Keyword.

Schlußbemerkung

In diesem Artikel habe ich drei Schleifenstatements vorgestellt - for, while und do. Diese sind "alte" Bekannte für Schleifenoperationen - aber C# hat noch eine weitere Anweisung zu bieten: foreach. Diese wird zum Iterieren über Collections eingesetzt, und ist Thema eines weiteren Artikels.

This printed page brought to you by AlphaSierraPapa

Download des Codes

Klicken Sie hier, um den Download zu starten.
http://www.aspheute.com/code/20000717.zip

Verwandte Artikel

A Brief History of C#
http:/www.aspheute.com/artikel/20000713.htm
Das foreach Statement
http:/www.aspheute.com/artikel/20000720.htm
Dateiupload mit ASP.NET
http:/www.aspheute.com/artikel/20000802.htm
Datenaufbereitung in ADO.NET
http:/www.aspheute.com/artikel/20001106.htm
Deutsche Personalausweisnummern verifizieren
http:/www.aspheute.com/artikel/20020507.htm
Ein Touch-Utility in C#
http:/www.aspheute.com/artikel/20020226.htm
Enums lesbar machen
http:/www.aspheute.com/artikel/20010215.htm
Kontrollstatements in C#
http:/www.aspheute.com/artikel/20000714.htm
Sortieren mit dem IComparer Interface
http:/www.aspheute.com/artikel/20020417.htm

Links zu anderen Sites

Die aspDEdotnet Diskussionsliste
http://www.aspgerman.com/aspgerman/listen/anmelden/aspDEdotnet.asp
Presenting C#
http://www.amazon.com/exec/obidos/ASIN/0672320371/alphasierrapapa

 

©2000-2006 AspHeute.com
Alle Rechte vorbehalten. Der Inhalt dieser Seiten ist urheberrechtlich geschützt.
Eine Übernahme von Texten (auch nur auszugsweise) oder Graphiken bedarf unserer schriftlichen Zustimmung.