Wątek przeniesiony 2017-02-06 23:50 z C# i .NET przez somekind.

Zasięgi zmiennych w C#

0

Cześć!
Mógłby mi ktoś wytłumaczyć jak działają zasięgi w C#?

int i = 0;
String[] results;
while(result.Read()) 
{
   results[i] = result["name"].ToString();
   i++;
}
return results;

Visual studio do zmiennej i się nie pluje, natomiast ma problem ze zmienną results (która jest zadeklarowana zaraz przed pętlą). Mógłby mi ktoś wytłumaczyć dlaczego?

0

Bzdurę palnąłem. @some_ONE ma rację, a problemem jest to że nie zainicjowałeś zmiennej typu string[].

0

A jaki masz błąd?
Bo raczej nie jest to problem z zasięgiem zmiennych.

1

A jaki jest ten problem, ktory ma VS? Strzelam, ze NullReferenceException bo twoje results jest nullem (deklarujesz je ale nigdzie nie inicjalizujesz).

0

Tak, zapomniałem wrzucić błędu, oto on:

Użyto nieprzypisanej zmiennej lokalnej „results”

result nie jest nullem ponieważ to nie jest cała metoda :)

Btw jak zadeklarować taką tablicę:
array[int][string] = string?

0
NickOver napisał(a):

Użyto nieprzypisanej zmiennej lokalnej „results”

Czyli wszystko jasne :)

2

Brakuje Ci inicjalizacji, czyli tego:

 String[] results = new string[] { };
0

Odpowiadający są chyba sami początkującymi. Taka dyskusja pod prostym pytaniem! I jak można niby użyć później tablicy o rozmiarze zero?

1

Tablice inicjalizujesz podając jej wielkość, np.

 int[] numbers = new int[3];

Nie wiem dokładnie jakiego typu jest zmienna result ale strzelam że IDataReader więc na etapie iteracji nie wiesz ile wyników będzie zwróconych. Zamiast używać tablicy lepiej użyj List<string>.

0
return Enumerable.Range(0, int.MaxValue)
    .Select(x => result)
    .TakeWhile(r => r.Read())
    .Select(r => r["name"].ToString())
    .Reverse()
    .ToArray();

;-)

A tak serio - jeśli nie wiesz, ile jest elementów, to nie możesz użyć tablicy. Tablice mają stały rozmiar, który musi być znany w momencie tworzenia takiej tablicy. Ty tworzysz pustą tablicę (zero elementów), a potem odwołujesz się do nieistniejących elementów. Kompilator czasem jest to w stanie wykryć i tak właśnie jest teraz.
Zamiast tablicy użyj listy stringów i metody Add().

0
Nadziany Lew napisał(a):

Odpowiadający są chyba sami początkującymi. Taka dyskusja pod prostym pytaniem! I jak można niby użyć później tablicy o rozmiarze zero?

W moim przykładzie pokazałem mu tylko co to jest inicjalizacja.

1 użytkowników online, w tym zalogowanych: 0, gości: 1