Mi értelme van annak, hogy c# ban egy for-ciklusban deklarált, definiált változó lokális a ciklust tartalmazó blokkra?
Például:
using System;
public class Test
{
public static void Main()
{
for(int i = 0; i < 5; ++i) {}
int i; //Ez nem jó mert már i létezik.
}
}
Ez az ami érthetetlen számomra:
using System;
public class Test
{
public static void Main()
{
for(int i = 0; i < 5; ++i) {}
int j = i; /* The name `i' does not exist in the current context */
}
}
Miért tették lokálissá ha egyszer nem használhatom?
kérdező ezt értheted félre: "A
ciklusfeltételen belül deklarált ciklusváltozó lokális lesz a ciklust tartalmazó blokkra (vagyis ebben az esetben a
teljes Main függvényre) nézve"
ciklusfeltételen belül = for(int i = 0 ....)
ciklust tartalmazó blokkra = for() {ez a rész}
vagyis ebben az esetben a teljes Main függvényre = ez szerintem rossz
---------------
feltett kérdés:
using System;
public class Test
{
public static void Main()
{
for(int i = 0; i < 5; ++i) {}
int i; //Ez nem jó mert már i létezik. ITT NYUGODTAN LÉTRE LEHET HOZNI ÉS LE IS KELL FORDULNIA(TELJESEN FÜGGETLEN A for(int i =...)-től
}
}
----------
using System;
public class Test
{
public static void Main()
{
for(int i = 0; i < 5; ++i) {}
int j = i; /* The name `i' does not exist in the current context */ EZ ITT JOGOS HIBA, UGYANIS A i MEGSZŰNT AZ FOR-T LEZÁRÓ } JELNÉL
}
}
Ezek biztosan így működnek, nem 1x használtam már.
Azért nem értettük, mert ilyenről még nem hallottam! :) Szerintem ez a könyv el van írva. Elég rég c#-oztam de ez nekem is hülyeségnek tűnik.
ennek le kellene fordulnia:
using System;
namespace TestApp
{
class Program
{
static void Main(string[] args)
{
for (int i = 0; i < 10; ++i)
{
Console.WriteLine(i);
}
int i = 10; // itt NINCS HIBA
Console.ReadKey();
}
}
}
ez pedig hülyeség:
namespace TestApp
{
class Program
{
static void Main(string[] args)
{
for (int i = 0; i < 10; ++i)
{
Console.WriteLine(i);
}
int j = i; // nem fog lefordulni, mert i még nem létezik!
Console.ReadKey();
}
}
}
a mainen belül csak akkor használhatod ha a for ELŐTT létrehozod!
és CSAK a ciklusblokkra lokális! ebből következik, hogy az első az jó!
legalábbis szerintem ez így van. de majd valaki kijavít akinek kicsit frissebb emlékei vannak, ha tévednék.
(kipróbáltad visual stúdióban?)
*a mainen belül csak akkor használhatod ha a for ELŐTT létrehozod!*
ezt a kijelentésemet kiegészíteném:
tehát ha pedig azt szeretnéd, hogy a teljes mainben az i ugyanazt a változót jelentse (tehát a for ciklus után is dolgozni szeretnél a megnövelt értékével) akkor pedig előtte hozd létre.
Akkor próbáljátok ki ha nem hisztek nekem.
Az első példát amire azt mondjátok,hogy le kell fordulnia.
Nem fog.Nem fogom leírni mégegyszer.
Előző válaszoló a könyvben jól van írva mert ez amit te írtál nem fordul le:
A saját szemeddel is láthatod ha bemásolod az ideone.com ba vagy a vs be.
Jól írta a könyv mert ezek szerint valóban lokális nemcsak a ciklus blokkjára hanem a ciklust tartalmazó blokkra is.De miért van ez így ha a használata nem engedélyezett a ciklust tartalmazó blokkban?
Akkor ezek szerint mi tudtuk rosszul. Ez eléggé furcsa, mert régen használtam a c#-ot de nem emlékszem ilyen problémára. Lehet azért, mert sose próbáltam létrehozni így. Többnyire a for cikluson kívül deklaráltam mindig a változókat és ott csak kinulláztam. pl így: [link]
Ez egyébként teljesen logikátlan, hogy miért nem szűnik meg a változó mikor kilép a ciklusból.
Mondjuk az is bosszantó, hogy nincs lehetőség "megsemmisíteni" egy változót. Php-ban ott az unset.
C++-ban is van egyszerű megoldás erre a problémára.
(lehet nem a legjobb, most kezdtem még csak tanulni ezt a nyelvet)
De ennek semmi értelme. Újradefiniálni nem tudom, használni nem tudom, ott van, és mégsincs. Mi értelme van ennek?
Elég gyakran kell használnom egy blokkon belül 4-5 egyszerű for ciklust, egymás után a ciklusváltozóm meg marad ugyanaz. Minek találjak ki 5 nevet 5 egyszerű ciklusváltozóra?
(Semmi olyat nem csinál az említett ciklus ami miatt indokolt lenne jobban elnevezni, mint "tomb_index".)
Kapcsolódó kérdések:
Minden jog fenntartva © 2025, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!