Kezdőoldal » Számítástechnika » Programozás » System. NullReferenceException...

System. NullReferenceException: 'Az objektumhivatkozás nincs beállítva semmilyen objektumpéldányra. ' hiba beolvasott fájl darabolásakor C#-ban?

Figyelt kérdés

[link]


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.



2019. febr. 25. 18:59
1 2
 1/12 anonim ***** válasza:

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.

2019. febr. 25. 19:13
Hasznos számodra ez a válasz?
 2/12 anonim ***** válasza:
A seged[]-ed 1 hosszú tömb, mit akarsz azon splitelni? Aztán utána még hivatkoznál a 0-tól 4-ig elemére.
2019. febr. 25. 19:14
Hasznos számodra ez a válasz?
 3/12 anonim ***** válasza:

#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.

2019. febr. 25. 19:46
Hasznos számodra ez a válasz?
 4/12 A kérdező kommentje:

#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.


[link]

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.

2019. febr. 25. 19:53
 5/12 anonim ***** válasza:
2019. febr. 25. 19:58
Hasznos számodra ez a válasz?
 6/12 A kérdező kommentje:
#5 Köszönöm szépen, hasznát veszem mindenképp!
2019. febr. 25. 20:01
 7/12 anonim ***** válasza:

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?

2019. febr. 25. 20:03
Hasznos számodra ez a válasz?
 8/12 anonim ***** válasza:
Jó, semmi. Azt hittem, hogy a split() csak az első ; előtti elemet adja vissza, de utánaolvastam és nem...
2019. febr. 25. 20:05
Hasznos számodra ez a válasz?
 9/12 anonim ***** válasza:
100%

"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.

2019. febr. 25. 20:10
Hasznos számodra ez a válasz?
 10/12 anonim ***** válasza:

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.

2019. febr. 26. 10:39
Hasznos számodra ez a válasz?
1 2

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

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!