Novo

Forum kao aplikacija na telefonu

Dodajte forum na početni ekran i koristite ga kao aplikaciju, sa menijem na dnu ekrana.

  • 9 odgovora
  • 5.085 pregleda

Najnovija ↓

Kako ovo radi? [ASP.NET 2.0][C#] 26.12.2006. u 04:24 · pre 241 mesec #1
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?
Potpis
Shoot for the moon. Even if you miss, you'll land among the stars.
Les Brown
Re: Kako ovo radi? [ASP.NET 2.0][C#] 26.12.2006. u 13:54 · pre 241 mesec #3
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.
Potpis
Shoot for the moon. Even if you miss, you'll land among the stars.
Les Brown
Re: Kako ovo radi? [ASP.NET 2.0][C#] 26.12.2006. u 14:09 · pre 241 mesec #4
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)!
Potpis
Winners never quit, quitters never win.
Re: Kako ovo radi? [ASP.NET 2.0][C#] 26.12.2006. u 16:22 · pre 241 mesec #5
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.
Re: Kako ovo radi? [ASP.NET 2.0][C#] 26.12.2006. u 18:17 · pre 241 mesec #6
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?
Potpis
Shoot for the moon. Even if you miss, you'll land among the stars.
Les Brown
Re: Kako ovo radi? [ASP.NET 2.0][C#] 26.12.2006. u 18:32 · pre 241 mesec #7
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.

Potpis
http://www.vesic.org | Blog: http://www.vesic.org/blog | Programming:
http://www.vesic.org/english/blog
Re: Kako ovo radi? [ASP.NET 2.0][C#] 26.12.2006. u 18:46 · pre 241 mesec #8
Upravo sam posmatrao tu stranicu, ali sam ocigledno preskocio taj deo :)
Hvala!
Potpis
Shoot for the moon. Even if you miss, you'll land among the stars.
Les Brown
Re: Kako ovo radi? [ASP.NET 2.0][C#] 15.01.2007. u 21:07 · pre 240 meseci #9
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]
Re: Kako ovo radi? [ASP.NET 2.0][C#] 18.01.2007. u 12:40 · pre 240 meseci #10
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.
Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme