System. NullReferenceException: 'Az objektumhivatkozás nincs beállítva semmilyen objektumpéldányra. ' hiba beolvasott fájl darabolásakor C#-ban?
A belinkelt kód 42. sorában található s.Split(';'); sorára írja ki a fent említett hibát. Mi lehet az oka? 2013-as Visual Studioban már egyszer megírtam ugyan ezt a programot ugyan így, de a 2017-esben már kiadja ezt a hibát. Lehet valami tök egyszerű dolog, de én nem tudok rájönni mi lehet.
Gondolom az utolsó beolvasott sornál száll el.. akkor null az s értéke.
Amúgy elég csúnya a kódod... +2x olvasod végig a filet... usingokat illene inkább használni, stb.
#1 +1
Teljesen felesleges a két ciklus, ez is okozza a gondot, mert túlszaladsz a fájlon.
#2 kommentjét meg el se olvasd inkább.
#2 Teljesen de mindegy hogy mennyi írok a string[] tömb elemeinek számába, mert tudja magát bővíteni c#-ban a tömb én úgy tudom.
Ez a beolvasott fájl, van az első sorban egy "192" amit elfelejtettem. Ez okozta a problémát. Az utolsó for ciklust nem i = 0-ról kellett indítani, hanem 1-ről, mivel az első sor ugye nem kell nekem.
Azért olvasom be kétszer a fájlt mert az első alkalommal azt nézem meg hogy hány sora van a fájlnak. Tudom, van ennél légyegesen szebb és praktikusabb megoldás is, de nekünk sajnos ezt a spagetti kódot tanítják és készítenek fel az érettségire. Majd fejlődök.
Nem tudom c#-ban hogyan van, de számomra ez a sor:
seged = s.Split(';');
azt jelenti, hogy a seged-et egyenlővé teszed a split-ből kapott sztringgel. Fordul a ciklus, ekkor megint egyenlővé teszed seged-et vele, magyarul szó sincs itt bővítésről, egyszerűen csak felülírod.
Szerintem a tömb bővítésére vagy van speciális operátor (+= talán?) vagy van hozzá függvény (seged.add() talán?), legalábbis minden értelmes nyelvben ehhez hasonlóan van megoldva. Ha seged = valami;-t írsz, akkor abból honnan tudná a program, hogy te bővíteni akarod a tömböt, nem pedig felülírni a "valami" adattal?
"Teljesen de mindegy hogy mennyi írok a string[] tömb elemeinek számába, mert tudja magát bővíteni c#-ban a tömb én úgy tudom"
Rosszul tudod. A tömb statikus C#-ban.
A 192-ről lehet tudni hogy micsoda? Véletlenül nem az adja meg a sorok számát?
Amúgy ahogy már írták, a seged kezdeti 1 elemű értéke tök felesleges, hisz a Split hívásakor felül lesz írva. (Nem bővítve, hanem egy teljesen új tömb objektum készül)
Normális IDEk normális kiegészítőkkel (pl VS + Resharper) jelzik is ezt, kihalványítják a new string[1] részt, hogy arra nincs szükség. Nyilván még gyorsítani is fog a futáson, ha nem hozol létre +1 objektumot, bár 1 objektum létrehozásának megspórolásával (+GC általi felszabadításával) gyakorlatilag semmi látható gyorsulást nem fogsz látni.
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, 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!