[ Shevchenko @ 26.12.2006. 03:24 ] @
Code:

case "1":
                HiddenField n = (HiddenField)e.Item.FindControl("IDProizvoda");
case "2":
                n = (HiddenField) e.Item.FindControl("IDProizvoda");

Jel bi mogao neko da mi objasni u slucaju "2" kako .NET zakljucuje da je promenljiva n odgovarajuceg tipa?
[ barneymdx @ 26.12.2006. 11:51 ] @
To ne radi...
[ Shevchenko @ 26.12.2006. 12:54 ] @
Citat:
barneymdx: To ne radi...

Veruj mi radi, a sto me jos vise zbunjuje je to da ako ga i u case "2" deklarisem kao "HiddenField n=..." Prijavljuje mi da je "n" dva puta deklarisan.
[ VerbatimBOT @ 26.12.2006. 13:09 ] @
Tu nešto definitivno nije u redu!
Citat:
Shevchenko
Code:

case "2":
                n = (HiddenField) e.Item.FindControl("IDProizvoda");


Ja isto mislim da ovo ne može da radi (bar što se tiče C#, u VB-u može).
Citat:
Shevchenko: ako ga i u case "2" deklarisem kao "HiddenField n=..." Prijavljuje mi da je "n" dva puta deklarisan.

Ovo tek nije logično (bar meni)!
[ spartak @ 26.12.2006. 15:22 ] @
Nisam nikad ovako nesto probao. Ono sto mi pada na pamet je da proveris da li promenjivu n imas definisanu u scope u kojem se nalazi taj switch. U tom slucaju bi ovaj novi HiddenField n trebao da bude lokalni za taj case. Teoretski, kazem nisam probao.

U svakom slucaju nije dobra ideja da se to radi ovako, cak i da moze nema nikakvog razloga.
[ Shevchenko @ 26.12.2006. 17:17 ] @
I meni je ovo potpuno nelogina stvar, jer koliko se ja razumem, ako se ne izvrsi case"1" nece biti promenljive n, sto bi dovelo do greske pri izvrsavanju case"2"? Dok ako ovako nesto u if-u "normalno" vraca gresku da n ne postoji.

Citat:
spartak: Ono sto mi pada na pamet je da proveris da li promenjivu n imas definisanu u scope u kojem se nalazi taj switch.

Nemam, niti imam promenljivu na nivou klase koja je tog tipa. Imam samo metod
Code:

protected void Repeater1_ItemCommand(object source, RepeaterCommandEventArgs e)
    {
        switch (e.CommandName)
        {
            case "1":
                HiddenField n = (HiddenField)e.Item.FindControl("IDProizvoda");
                break;
            case "2":
                n = (HiddenField)e.Item.FindControl("IDProizvoda");
                break;
}
}

Cisto me interesuje kako je ovo moguce? Da li je ovo neki BUG, ili postoji logican razlog zasto je ovo moguce?
[ Dejan Vesic @ 26.12.2006. 17:32 ] @
Ovo je normalno ponašanje, po specifikaciji:

8.7.2 - http://msdn2.microsoft.com/en-us/library/aa664749(VS.71).aspx

"The statement-lists of a switch-block may contain declaration statements (Section 8.5). The scope of a local variable or constant declared in a switch block is the switch block."

Praktično, deklaracije važe unutar celog switch bloka a ne unutar case bloka.

[ Shevchenko @ 26.12.2006. 17:46 ] @
Upravo sam posmatrao tu stranicu, ali sam ocigledno preskocio taj deo :)
Hvala!
[ deretic @ 15.01.2007. 20:07 ] @
To mora da radi jer u slucaju 2 sa desne strane imaš eksplicitnu konverziju koja je sa desne strane u zagradi daje vrednost skrivenog polja, a promenjiva n je tako već deklarisana (HiddenField).Ovde se radi o prebacivanju jedne stavke iz kontrole u okviru nekog događaja pošto ima i e. predpostavljam , u promenjivu n tipa HiddenField. Po meni je to ispravna eksplicitna konverzija. [email protected]
[ misanink @ 18.01.2007. 11:40 ] @
Deklaracije vaze na nivou switch bloka, ali ukoliko to ne nije ono sto nam treba
mozemo da stavimo blok u okviru svakog case-a
Code:
switch (e.CommandName)
        {
            case "1":
                 {
                HiddenField n = (HiddenField)e.Item.FindControl("IDProizvoda");
                break;
                 }
            case "2":
                 {
                n = (HiddenField)e.Item.FindControl("IDProizvoda");
                break;
                 }
}

Ovaj kod se nece kompajlirati
Code:

switch (e.CommandName)
        {
            case "1":
                 {
                HiddenField n = (HiddenField)e.Item.FindControl("IDProizvoda");
                break;
                 }
            case "2":
                 {
                 HiddenField n = (HiddenField)e.Item.FindControl("IDProizvoda");
                break;
                 }
}


Ovaj hoce.