Forum: PC-Programmierung C# Problem mit "null"


von Thomas (Gast)


Lesenswert?

Hallo Forum!

Ich bin eigentlich Hardwareentwickler und habe mit Software nicht viel 
zu tun.. Nun möchte ich aber doch mel ein Programm schreiben dass mit 
einer Hardware von mir kommuniziert.

Da gibt es aber am Anfang gleich ein Problem! Ich lese die Daten ein und 
schreibe sie in ein File. Wenn ich später das File auslese, geht es 
auch, aber es kann sein das auch mal in einem String "null" steht.

ich mache nun folgendes:

Ich lese das File

  string daten = ReadFile(filename);

dann zerteile ich sie nach einem trennzeichen

  string[] geteilt=daten.split(';');

versuche die adresse zwei zu lesen

  label1.text=geteilt[2];

so wenn nun in der adresse 2 nichts eingetragen ist dann bekomme ich 
diesen Fehler: NullReferenceException wurde nicht behandelt. (Der 
Objektverweis wurde nicht auf eine Objektinstanz festgelegt.)

ich habe mir gedacht, ok dann frage ich ab bevor ich sie dem label1 
übergebeab, ob der innhalt null ist. Aber das geht auch nicht...

Bitte um Hilfe!

von Peter II (Gast)


Lesenswert?

Thomas schrieb:
> ch habe mir gedacht, ok dann frage ich ab bevor ich sie dem label1
> übergebeab, ob der innhalt null ist. Aber das geht auch nicht...

du musst einfach das array befragen wie gross ist es.

if (geteilt.lengh < 2 ) {
  zu wenig daten
)

(keine ahnung ob lengh stimmt, zur not doku lesen)

von M. Z. (bierbruder)


Lesenswert?

Alternativ einfach in einen Try-Catch Block den Zugriff auf die Adresse 
2 machen und bei Exception wie gewünscht reagieren.

von Thomas E. (thomase)


Lesenswert?

Thomas schrieb:
> ich habe mir gedacht, ok dann frage ich ab bevor ich sie dem label1
> übergebeab, ob der innhalt null ist. Aber das geht auch nicht...
Na sicher geht das.
Wie machst du das denn?

mfg.

von Peter II (Gast)


Lesenswert?

Thomas Eckmann schrieb:
> Na sicher geht das.

nein geht nicht, weil er schon hinter das array greift.

von Thomas E. (thomase)


Lesenswert?

Peter II schrieb:
> nein geht nicht, weil er schon hinter das array greift.
Kannst du den Satz mal erklären.

mfg.

von Marcus B. (raketenfred)


Lesenswert?

Thomas schrieb:
> label1.text=geteilt[2];

D.h. du möchtest das 3. Elemente des Arrays haben

Peter II schrieb:
> if (geteilt.lengh < 2 ) {
>   zu wenig daten
> )

soweit ich weiß schreibt man Length bei C# groß?! (gute IDE zeigt das 
an^^)

wenn du 3 Elemente im Array hast, dann liefert dir length auch 3.

Der Fehler entsteht, weil du über das Array hinausliest und das mag C# 
nicht.

Entweder kann man das mi der oben gezeigten if Schleife regeln

oder man setzt
try{
dein Code
}
catch(NullReferenceException){
Daten nicht vollständig
}
catch(Exception e){
Allgemeiner Fehler e
}

von Peter II (Gast)


Lesenswert?

Thomas Eckmann schrieb:
> Kannst du den Satz mal erklären.

wenn man ein array hat

string test[2] = ...

dann darf man NIE auf test[2] zugreifen, dort steht auch keine NULL oder 
irgendetwas anderes, man ist schon hinter dem array. Damit kann man auch 
nicht test[2] == NULL vergleichen.

man müsste also das ganze per try catch abfangen, was ich aber als nicht 
sinnvoll für diesen zweck sehen. Oder einfach vorher mal Prüfuen wie 
viele werte denn im dem array stecken.

von Carsten W. (eagle38106)


Lesenswert?

1
      string daten = "blablabla;tata";
2
      string [] geteilt = daten.Split (';');
3
      int teiler = geteilt.GetUpperBound (0);
4
      Console.WriteLine ("teiler = " + teiler.ToString ());
5
      for (int i = 0; i <= teiler; i++)
6
        Console.WriteLine (geteilt [i]);

gibt folgenden Output:

1
teiler = 1
2
blablabla
3
tata

von Thomas E. (thomase)


Lesenswert?

Peter II schrieb:
> nein geht nicht, weil er schon hinter das array greift
Der Satz ist einfach nur unverständlich.

Aber nach deiner Erklärung ist klar, was du damit meinst.

Peter II schrieb:
> wenn man ein array hat
> string test[2] = ...
> dann darf man NIE auf test[2] zugreifen

Das ergibt aber eine "IndexOutOfRangeException"

Und nicht das hier:
Thomas schrieb:
> so wenn nun in der adresse 2 nichts eingetragen ist dann bekomme ich
> diesen Fehler: NullReferenceException wurde nicht behandelt. (Der
> Objektverweis wurde nicht auf eine Objektinstanz festgelegt.)

Ist leider das Problem, wenn Fragesteller nur Codefetzen liefern, die 
ursächlich nichts mit dem Fehler zu tun haben.

Mit anderen Worten:
@Thomas (Gast
Bitte den ganzen Code.

mfg.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.