The name 'createDirectory' does not exist in the current context

0

Cześć.
Mam problem z sam w sumie nie wiem czym. Oto kod metody:

private void button3_Click(object sender, EventArgs e)
        {
            var savePath = textBox1.Text;
            if (checkBox1.Checked){
                var createDirectory = 1;
            } else {
                var createDirectory = 0;
            }
            var appDataFolder = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData);
            MessageBox.Show(createDirectory);
        }

Jak widzicie zmienna createDirectory jest deklarowana trochę wyżej, w tej samej metodzie. Dodatkowo co ciekawe oprócz błędu z tematu dostaję również ostrzeżenie że zmienna ta nie jest nigdzie używana. Mógłby mi ktoś wyjaśnić czemu dostaję taki błąd jak i jak go wyeliminować?

3

Deklarowana jest w bloku if, albo else. Po wyjściu z tego bloku już nie istnieje.

4

Bo deklarujesz ją w ifie. Zakres tej zmiennej kończy się zaraz po przypisaniu. Poza tym deklarujesz tutaj nie jedną, a dwie o tej samej nazwie.

Powinieneś to zrobić mniej więcej tak:

private void button3_Click(object sender, EventArgs e)
        {
            var savePath = textBox1.Text;
            var createDirectory = 0;
            if (checkBox1.Checked){
                createDirectory = 1;
            }
            var appDataFolder = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData);
            MessageBox.Show(createDirectory);
       }

lub

var createDirectory = checkbox1.Checked ? 1 : 0;
0

Ok, w takim razie, jak rozumiem mam ją zadeklarować przed blokiem a w ifie tylko przypisać do niej wartość?
A z tego co wiem (nacodzień jestem programistą php i python'a) Chyba nie ma możliwości aby w tym samym czasie zmienna pasowała do if i elsa.
BTW Bo nie mogę tego zrozumieć. Po co kompilator unsetuje zmienne które są w ifach?

0

Co robi?

0
some_ONE napisał(a):

Co robi?

unset to pehapowa funkcja do zwalniania pamięci tj. usuwania zmiennych.

0

Zmienna nie jest unsetowana. Kończy się jej zakres. Z nadrzędnego zakresu nie możesz zobaczyć zmiennych zadeklarowanych w wewnętrznych. Kropka. Kiedy pamięć będzie zwolniona, to jedynie GC (Garbage Collector) wie ;)

0
Sarrus napisał(a):

Zmienna nie jest unsetowana. Kończy się jej zakres. Z nadrzędnego zakresu nie możesz zobaczyć zmiennych zadeklarowanych w wewnętrznych. Kropka. Kiedy pamięć będzie zwolniona, to jedynie GC (Garbage Collector) wie ;)

Ok, rozumiem. Ale nie pojmuję po co? Mógłbyś podać jakiś przykład w którym się to przydaje?

0

@NickOver zadaj konkretne pytanie to dostaniesz konkretna odpowiedz
co po co ma sie robic?
co sie na co przydaje?

1
NickOver napisał(a):

Ok, rozumiem. Ale nie pojmuję po co? Mógłbyś podać jakiś przykład w którym się to przydaje?

Normalne języki mają coś takiego jak zakres widoczności zmiennej. To się przydaje, żeby nie mieć burdelu w kodzie i globalnego kontekstu zaśmieconego tysiącami niepotrzebnych zmiennych.
Nie uwierzę, że PHP jest taż tak upośledzony, że tego nie ma.

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