Forum: PC Hard- und Software c#: string darf nicht null sein


von maik (Gast)


Lesenswert?

Hi,
ich versuche gerade ein excel-file auszulesen und den inhalt in ein 
string zu schreiben.

Nun habe ich das Problem, dass eine Zelle im Excelsheet leer sein kann. 
die EPPlus.dll welche das excelsheet ausliest gibt in diesem Fall 'null' 
zurück.

Da ich den Ihnalt aber nach string konvertiere bekomme ich einen Fehler 
:-(
1
Datensatz.Artikel = currentWorksheet.Cells[i, 3].Value.ToString();
wie prüfe ich hier nur 'halbwegs übersichtlich' auf null?

die mir bekannte Lösung ist mir eigentlich schon zuviel Tipparbeit da es 
um rel. viele Spalten geht.
1
try
2
{
3
  Datensatz.Artikel = currentWorksheet.Cells[i, 3].Value.ToString();
4
}
5
catch
6
{
7
  Datensatz.Artikel = "";
8
}

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

maik schrieb:
> die mir bekannte Lösung

das sit keine Lösung sondern eine Verschleierung von Problemen, da du 
hier JEDEN Fehlerfall ignorierst.

maik schrieb:
> wie prüfe ich hier
1
if(currentWorksheet.Cells[i, 3].Value != null) {
2
//ungeleich null
3
} else {
4
//null
5
}
das solte aber wohl hoffentlich in jedem C' Tutorial stehen also --> 
Kauf dir ein Buch oder arbeite ein paar Einführungsbeispiele durch!

maik schrieb:
> Datensatz.Artikel = "";

Ich würde den auch auf null setzen und nicht auf leer, null ist NICHT 
der leere String!

von Borislav B. (boris_b)


Lesenswert?

Wie wär's mit:

Datensatz.Artikel = currentWorksheet.Cells[i, 3].Value.ToString() ?? "";

Ist ein bisschen kürzer ;-)

von Εrnst B. (ernst)


Lesenswert?

Boris B. schrieb:
> currentWorksheet.Cells[i, 3].Value.ToString() ?? "";

Bin jetzt kein C#-Profi, aber klappt das auch, wenn
"currentWorksheet.Cells[i, 3].Value" null ist?
ist null.ToString() in C# legal und gibt wieder null zurück, damit der 
??-Operator seinen Job tun kann?

von Udo S. (urschmitt)


Lesenswert?

Εrnst B✶ schrieb:
> Bin jetzt kein C#-Profi,

Ich auch nicht, aber eigentlich kann man von einem null Objekt keine 
Methode aufrufen, das führt zu einer Nullpointer Exception.

Wenn man null erwartet, muss man darauf prüfen.
Man kann sich natürlich eine Methode definieren, die das macht und die 
50 mal aufrufen und muss nicht 50 mal if schreiben, wenn die aufrufenden 
Stellen gleich sind.

von bb (Gast)


Lesenswert?

Au ha! Das .ToString() habe ich in der Hektik übersehen.
Dann klappts natürlich nicht...

Sorry, Vorschlag zurückgezogen.

von C#Null (Gast)


Lesenswert?

Wie wäre es denn wenn der Datentyp nullable wäre ?

http://msdn.microsoft.com/en-us/library/2cf62fcy.aspx

Nur mal so die Gedanken eines Anfängers.

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

C#Null schrieb:
> Wie wäre es denn wenn der Datentyp nullable wäre ?

Trotzdem wird hier auf einen "Nullpointer" zugegriffen, indem ToString 
aufgerufen wird!

von Mobiler (Gast)


Lesenswert?

Tipparbeit sparst du dir indem du den Inhalt der Zelle vorher einer 
temporären Variablen zuweist, diese dann prüfst und dann konvertierst. 
Um das if wirst du nicht drum herum Kommen wenn du sauber bleiben 
willst.

Oder du benutzt dieses Konstrukt wirst dich aber irgendwann fragen warum 
das nötig ist
Convert.ToString(cell.Value);

von C#Null (Gast)


Lesenswert?

Habe die EPPlus.dll gerade mal "ausprobiert".

currentWorksheet.Cells[1,1].Text wäre übrigens noch eine Alternative, 
wenn du sowieso nur mit Strings weiterarbeiten möchtest.

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.