/ / c # datarow porównuje DBNull.Value dla DateTime vs null dla łańcucha - c #, datetime, null, datarow, dbnull

c # datarow porównując DBNull.Value dla DateTime vs null dla łańcucha - c #, datetime, null, datarow, dbnull

Mam następujący kod, który wydaje się działać:

DataRow row = <result of a query>;
string strVarName = (row["VarName"]??"").ToString();

Mogę też użyć czegoś takiego - i to również działa:

string strVarName = row["VarName"]==null ? "" : row["VarName"].ToString();

Chciałbym użyć tego samego formularza, aby uzyskać datę. Intellisense informuje mnie, że dopuszczalny operator nie lubi pracować z datami, więc próbuję czegoś podobnego, muszę to zrobić

string strVarName = row["VarName"]==DBnull.Value ? "" : row["VarName"].ToShortDateString();

Pojąć? Dla ciągów porównuję do wartości null, ale dla dat porównuję z DBnull. Łańcuch daty nie będzie działał spójnie z porównaniem do wartości null. I "m okay z tym ... i może być, że porównanie ciąg będzie działać, jeśli próbowałem porównać go do DBNull.Value. Po prostu jestem ciekawy, dlaczego wydaje się, że muszę użyć DBNull.Value w porównaniu do pola DateTime DataRow, podczas gdy mogę użyć wartości null w porównaniu z polem string.

Odpowiedzi:

2 dla odpowiedzi № 1

DateTime jest typem wartości i nie może być zerowy, dlatego nie można „porównać go z wartością null (tak jak„ nie można porównywać int z wartością null ”).