Ihre Variablen sind außerhalb der do/while verwendet (die curlies typischerweise in C# den Umfang definieren), und da es im Innern der do-while deklariert wird, können Sie es nicht außerhalb dieses Bereichs verwendet werden.
Sie können dies beheben, indem Sie es einfach außerhalb der Schleife deklarieren.
int composite = 0; // you are not required to set it to zero, as long
// as you do not use it before you initialize it
do
{
index += index;
composite = index + 1;
// more code here
} while (UnsetBitmask(bitmasks, composite));
Anmerkung (1), ist es üblich, zu erklären und eine Variable in einem Rutsch gesetzt, aber dies ist nicht erforderlich, solange Sie es einstellen, bevor Sie es benutzen.
Hinweis (2): in C#, geschweifte Klammern {....}
den Umfang der Variablen definieren. Sie können eine Variable nicht außerhalb ihres Gültigkeitsbereichs verwenden, sie ist nicht mehr "sichtbar", tatsächlich ist sie, sobald sie den Gültigkeitsbereich verlässt, bereit für die Sammlung von Datenmüll und ihr Inhalt kann undefiniert sein.
ich dieses konw, aber warum Compiler diese Sie
cant do dies in den Kommentaren gefragt. Die Antwort ist weniger trivial als es scheinen mag. Es hängt stark von der Sprachdefinition ab. Einige Sprachen, wie Perl oder ältere BASIC, ermöglichen Variablen auf jeder Ebene und in jedem Bereich deklariert werden. Andere Sprachen erlauben das Scoping von Variablen und erfordern, dass Variablen vor ihrer Verwendung deklariert werden (C#, Java, C++, Python). Normalerweise, aber nicht notwendigerweise, ist dies für statically typed languages üblich, da der Compiler im Voraus wissen muss, welche Art von Daten Sie in die Variable eingeben möchten, um die Überprüfung des Typs durchzuführen.
Wenn ein Compiler die Deklaration, aber nicht den Geltungsbereich erzwingt, bedeutet dies, dass alle Variablen global sind, was in größeren Programmen schwierig ist. Wie bei einem Programmierer müssen Sie beibehalten, wo Sie welche Variablennamen verwendet haben und die Eindeutigkeit beibehalten . Das ist sehr mühsam (denke COBOL).
C# hinzugefügt das dynamic
Schlüsselwort, das für Variablen mit dynamischen Typ ermöglicht, aber dies erfordert immer noch Sie die Variable vor der Verwendung zu definieren.
Ein Compiler kann dies tun, aber die Designer von C# haben entschieden, dass eine klare Sprache ist besser, und ihrer Meinung nach deklarierten Variablen are a good thing, weil es falsche Fehler und unmöglich befolgende Code verhindert:
// can you see the problem?
va1l = 1;
val1 = 2;
vall = va1l + vall;
Die Erzwingung von Variablen zu deklarieren und diese zu begrenzen, verhindert diese und ähnliche Fehler.
Variable Scoping nachschlagen. 'composite' existiert nur im Rahmen Ihrer do while-Schleife und nicht außerhalb davon. – Brandon
ich konw dies, aber warum Compiler kann das nicht tun? –
Warum * sollte * eine außerhalb des Geltungsbereichs liegende Variable außerhalb ihres Gültigkeitsbereichs verwendbar sein? Es wäre ein Fehler, wenn Sie dies tun könnten –