Jestem w trakcie migracji projektu z Visual Basic do C # i musiałem zmienić sposób for
deklarowania używanej pętli.
W VB.NET for
pętla jest zadeklarowana poniżej:
Dim stringValue As String = "42"
For i As Integer = 1 To 10 - stringValue.Length
stringValue = stringValue & " " & CStr(i)
Console.WriteLine(stringValue)
Next
Które wyjścia:
42 1
42 1 2
42 1 2 3
42 1 2 3 4
42 1 2 3 4 5
42 1 2 3 4 5 6
42 1 2 3 4 5 6 7
42 1 2 3 4 5 6 7 8
W C # for
pętla jest zadeklarowana poniżej:
string stringValue = "42";
for (int i = 1; i <= 10 - stringValue.Length; i ++)
{
stringValue = stringValue + " " + i.ToString();
Console.WriteLine(stringValue);
}
A wynik:
42 1
42 1 2
42 1 2 3
To oczywiście nie jest poprawne, więc musiałem nieznacznie zmienić kod i dołączyć zmienną całkowitą, która utrzymywałaby długość ciągu.
Zobacz poniższy kod:
string stringValue = "42";
int stringValueLength = stringValue.Length;
for (int i = 1; i <= 10 - stringValueLength; i ++)
{
stringValue = stringValue + " " + i.ToString();
Console.WriteLine(stringValue);
}
A wynik:
42 1
42 1 2
42 1 2 3
42 1 2 3 4
42 1 2 3 4 5
42 1 2 3 4 5 6
42 1 2 3 4 5 6 7
42 1 2 3 4 5 6 7 8
Teraz moje pytanie dotyczy tego, jak Visual Basic różni się od C # pod względem Visual Basic przy użyciu stringValue.Length
warunku w for
pętli, mimo że za każdym razem, gdy występuje pętla, zmienia się długość ciągu. Natomiast w C #, jeśli używam warunku stringValue.Length
w for
pętli, zmienia on początkową wartość ciągu za każdym razem, gdy występuje pętla. Dlaczego to?