C# programozás kezdőknek › 2.1 kiegészítő gyakorlólecke
C# tanfolyam · 2.1 kiegészítő gyakorlás
Bool és TryParse C#-ban – sikerült vagy nem?
Miért kell a programnak tudnia, hogy egy átalakítás sikerült-e? Ebben a leckében a bool és a TryParse() logikáját rakjuk rendbe, sok rövid próbával.

A lecke végére
- el tudod magyarázni, mire való a
bool; - érted, miért ad a
TryParse()truevagyfalseértéket; - megkülönbözteted a sikeres és a sikertelen számkonverziót;
- érted, miért nem elég csak a kapott számot nézni.
Ehhez már ismerned kell
- a
stringés azinttípusú változókat; - a
Console.ReadLine()utasítást; - azt, hogy a beírt adat először mindig szövegként érkezik.
Először értsük meg a problémát
Tegyük fel, hogy a program életkort kér:
Console.WriteLine("Hány éves vagy?");
string adat = Console.ReadLine();A felhasználó beírhatja azt, hogy 14. De beírhatja azt is, hogy alma, tizennégy vagy 14 éves.
Két kérdésre kell választ kapnunk
1. Sikerült-e a beírt szöveget egész számmá alakítani? 2. Ha sikerült, mi lett maga a szám? Mit gondolsz: melyik kérdésre lehet egyetlen szóval, igennel vagy nemmel válaszolni?
Az első kérdésre nem egy újabb szám a válasz, hanem egy egyszerű igen vagy nem. Itt jön képbe a bool.
A bool: igen vagy nem
A bool a C# logikai adattípusa. Egy bool típusú változónak csak kétféle értéke lehet: true (igaz) vagy false (hamis).
bool lampaFelkapcsolva = true;
bool feladatKesz = false;
Console.WriteLine(lampaFelkapcsolva);
Console.WriteLine(feladatKesz);Ezek a változók egy-egy kérdésre válaszolnak. Fel van kapcsolva a lámpa? Igen: true. Kész van a feladat? Nem: false. A kimenet:
True
FalseKisbetű a kódban, nagybetű a kimenetben
A kódban kisbetűvel írjuk: true, false, mert ezek C# kulcsszavak. Kiíráskor viszont a .NET nagy kezdőbetűvel jeleníti meg őket: True, False. Most azért írjuk ki, hogy lássuk, mi történik a program belsejében. Egy kész program ezt az értéket inkább döntésekhez használja.
Te jössz! Mit ír ki ez a program?
bool jatekVege = false;
Console.WriteLine(jatekVege);
jatekVege = true;
Console.WriteLine(jatekVege);Megoldás
False
TrueA bool változó értéke ugyanúgy megváltozhat, mint egy string vagy int változóé.
Mit csinál a TryParse()?
Nézd meg ezt a két sort:
string adat = "25";
bool sikerult = int.TryParse(adat, out int szam);A második sor elsőre elég sűrűnek tűnik. Fordítsuk le magyarra:
„Próbáld meg az adat tartalmát egész számmá alakítani. Mondd meg, hogy sikerült-e, és tedd az eredményt a szam változóba.”

| Mit akarunk tudni? | Hol kapjuk meg? |
|---|---|
| Sikerült az átalakítás? | sikerult → true vagy false |
| Mi lett a szám? | szam |
Mit jelent az out?
Egy művelet általában egy eredményt ad vissza. A TryParse() kettőt: a visszatérési értéke a bool, a számot pedig az out kulcsszóval megjelölt változóba teszi. Az out int szam ugyanabban a sorban létre is hozza a szam változót.
De hát a „25” szöveg!
Igen, az adat valóban string. A TryParse() azonban nem azt kérdezi, hogy szöveg-e, hanem ezt:
„Ennek a szövegnek a tartalma értelmezhető egész számként?”
"25" → true
Szövegként tároljuk, de a tartalma értelmezhető egész számként.
"alma" → false
Ez is szöveg, de a tartalma nem alakítható egész számmá.
Nézzük meg több bemenettel
| Bemenet | Átalakítható int-té? | sikerult | szam |
|---|---|---|---|
"25" | igen | true | 25 |
"-8" | igen | true | -8 |
"0" | igen | true | 0 |
"alma" | nem | false | 0 |
"14 éves" | nem | false | 0 |
"4,5" | nem, mert nem egész szám | false | 0 |
Miért nem elég csak a számot nézni?
Nézd meg ezt a két bemenetet: a "0" eredménye true és 0, az "alma" eredménye false és 0. Mindkét esetben 0 van a szam változóban, mert sikertelen átalakításnál a TryParse() mindig 0-t tesz bele. Csak a bool eredmény mondja meg, hogy a nulla valódi bemenet volt-e.
Jósolj, mielőtt futtatod!
Mit gondolsz?
Minden példánál először gondold végig, mi lesz a sikerult és a szam értéke. Csak utána nyisd le a megoldást!
1. példa
string adat = "42";
bool sikerult = int.TryParse(adat, out int szam);
Console.WriteLine(sikerult);
Console.WriteLine(szam);Megoldás
True
422. példa
string adat = "kettő";
bool sikerult = int.TryParse(adat, out int szam);
Console.WriteLine(sikerult);
Console.WriteLine(szam);Megoldás
False
03. példa
string adat = "-15";
bool sikerult = int.TryParse(adat, out int szam);
Console.WriteLine(sikerult);
Console.WriteLine(szam);Megoldás
True
-154. példa
string adat = "0";
bool sikerult = int.TryParse(adat, out int szam);
Console.WriteLine(sikerult);
Console.WriteLine(szam);Megoldás
True
0A 0 itt valódi, sikeresen átalakított szám.
Most kérjük be a felhasználótól
Console.WriteLine("Írj be egy egész számot!");
string adat = Console.ReadLine();
bool sikerult = int.TryParse(adat, out int szam);
Console.WriteLine($"Sikerült az átalakítás: {sikerult}");
Console.WriteLine($"A kapott szám: {szam}");Te jössz!
Futtasd többször a programot, és próbáld ki ezekkel a bemenetekkel: 25, alma, -7, 0, 14 éves. Előbb tippelj, utána futtasd! Próbálj olyan bemenetet is, amelyről nem vagy biztos, hogy elfogadja.
Zöld hullámvonal a ReadLine alatt?
Ez a CS8600 figyelmeztetés, nem hiba: a program lefut. Az adatbekérés leckében elmagyaráztuk, mit jelent.
Parse vagy TryParse?

Parse()
„Alakítsd át ezt számmá.”
int kor = int.Parse(adat);Ha az adat nem alakítható számmá, a Parse() kivételt dob (FormatException), és ha ezt nem kezeljük, a program hibaüzenettel leáll.
TryParse()
„Próbáld meg átalakítani, és mondd meg, sikerült-e.”
bool sikerult = int.TryParse(adat, out int kor);Sikertelen átalakításnál nem áll le a program: a sikerult értéke false lesz, és mi dönthetjük el, mi történjen.
A TryParse még nem old meg mindent
Egyelőre csak azt tudjuk, hogy az átalakítás sikerült-e. A következő lépés az lesz, hogy a program a true vagy false eredmény alapján más-más dolgot csináljon. Ehhez később az if utasítást fogjuk használni.
Önálló gyakorlás
1. Adatvizsgáló
Kérj be egy adatot a felhasználótól. A program írja ki, sikerült-e egész számmá alakítani, és mi lett a szám értéke. Próbáld ki legalább három különböző bemenettel.
Segítség
Szükséged lesz egy string, egy bool és egy int típusú változóra.
Egy lehetséges megoldás
Console.WriteLine("Írj be valamit!");
string adat = Console.ReadLine();
bool sikerult = int.TryParse(adat, out int szam);
Console.WriteLine($"Sikerült: {sikerult}");
Console.WriteLine($"A szám: {szam}");2. Életkor-próba
Kérj be egy életkort, és próbáld meg egész számmá alakítani. Minden futtatás előtt tippeld meg az eredményt! Próbáld ki ezekkel: 14, 0, tizennégy, 14 éves.
Egy lehetséges megoldás
Console.WriteLine("Hány éves vagy?");
string adat = Console.ReadLine();
bool sikerult = int.TryParse(adat, out int kor);
Console.WriteLine($"Átalakítható számként: {sikerult}");
Console.WriteLine($"A kor változó értéke: {kor}");3. Tesztlabor
Találj ki öt saját bemenetet. Mielőtt futtatod a programot, írd fel a füzetedbe a tippedet: sikerül-e az átalakítás, és mi lesz a szám. Utána hasonlítsd össze a valódi eredménnyel! Próbálj olyan példákat is, amelyek határesetnek tűnnek.
Ötletek határesetekre, eredményekkel
| Bemenet | Eredmény | Miért? |
|---|---|---|
" 25 " (szóközökkel) | true, 25 | Az elején és a végén álló szóközöket a TryParse figyelmen kívül hagyja. |
"+25" | true, 25 | Az előjel a szám része lehet. |
"2 5" | false, 0 | A szám közepén álló szóköz már nem megengedett. |
"25.0" | false, 0 | Az int csak egész számot fogad el, tizedesjelet nem. |
"99999999999" | false, 0 | Túl nagy: az int legnagyobb értéke 2 147 483 647. |
4. Hibadetektív
Nézd meg ezt a programrészletet. Mi lehet vele a probléma?
int.TryParse(adat, out int kor);
Console.WriteLine($"Te {kor} éves vagy.");Megoldás
A program nem tárolja el, hogy a TryParse() sikerült-e. Ha a felhasználó például azt írja be, hogy alma, akkor a kor értéke 0 lesz, és a program tévesen kiírja: „Te 0 éves vagy.”
5. Igaz vagy hamis?
- A
boolcsaktruevagyfalselehet. - A
"25"nem alakítható számmá, mert idézőjelek között van. - A
TryParse()megmondja, sikerült-e az átalakítás. - A
"0"lehet sikeres bemenet. - Ha a
szamértéke 0, biztosan hibás volt a bemenet.
Megoldás
- Igaz. A logikai típusnak csak ez a két értéke van.
- Hamis. Az idézőjel csak azt jelzi, hogy szövegről van szó; a tartalma, a 25 számként értelmezhető.
- Igaz. Ezt adja vissza
boolértékként. - Igaz. A 0 is érvényes egész szám.
- Hamis. A 0 lehet valódi bemenet is; ezt csak a
booleredmény dönti el.
Amit ebből biztosan vigyél tovább
- A
boollogikai típus, két értéke:trueésfalse. - A
TryParse()nem azt vizsgálja, hogy a bemenet szöveg-e, hanem hogy a tartalma értelmezhető-e számként. - Két eredményt ad: a
boolmegmondja, sikerült-e, azoutváltozóba pedig a szám kerül. - A 0 lehet valódi szám, de sikertelen átalakítás után is megjelenik, ezért kell a
booleredmény. - A
Parse()hibás bemenetnél leállíthatja a programot, aTryParse()nem.
Gyors önellenőrzés
Válaszolj fejben, és csak utána nyisd le a választ.
1. Mire való a bool?
Igen–nem típusú kérdésekre ad választ: az értéke true vagy false.
2. Mit jelent, ha a TryParse() eredménye true?
Hogy a szöveget sikerült számmá alakítani, és a szám bekerült az out változóba.
3. Miért lehet a "25" szöveget egész számmá alakítani?
Mert a szöveg tartalma számjegyekből álló, érvényes egész szám.
4. Miért nem elég csak a szam értékét nézni?
Mert sikertelen átalakításnál is 0 lesz benne, így a 0 önmagában nem árulja el, hogy a bemenet jó volt-e.
5. Mi a különbség a Parse() és a TryParse() között?
Hibás bemenetnél a Parse() kivételt dob, a TryParse() pedig false értéket ad, és a program fut tovább.
Mit tudsz már?
- Tudod, mi a logikai típus, és mik az értékei.
- Érted, mit ad vissza a
TryParse(), és mi kerül azoutváltozóba. - Megkülönbözteted a valódi 0-t a sikertelen átalakítástól.
- Tudod, mikor jobb a
TryParse(), mint aParse().
Mire lesz jó mindez?
A program már meg tudja állapítani, hogy egy adat használható-e. A következő lépésben az eredmény alapján döntést is hoz majd, innen egyenes út vezet az if utasításhoz. Folytasd a fő tananyaggal!





