在上一个问题中:
Getting "This method or property cannot be called on Null values" error
我遇到以下代码的问题:
client_group_details.Add(new ClientGroupDetails(
reader.GetString(Col2Index),
reader.GetString(Col3Index)));
我收到以下错误:
Data is Null. This method or property cannot be called on Null values.
使用以下代码解决了此问题:
client_group_details.Add(new ClientGroupDetails(
reader.IsDbNull(Col2Index) ? null : reader.GetString(Col2Index),
reader.IsDbNull(Col3Index) ? null : reader.GetString(Col3Index)));
我现在遇到与GetDateTime
和GetInt32
类似的问题,例如:
client_group_details.Add(new ClientGroupDetails(
reader.GetString(Col2Index),
reader.GetString(Col3Index),
reader.GetDateTime(Col4Index)));
我尝试使用以下方法来解决此问题,但它没有工作
client_group_details.Add(new ClientGroupDetails(
reader.IsDbNull(Col2Index) ? null : reader.GetString(Col2Index),
reader.IsDbNull(Col3Index) ? null : reader.GetString(Col3Index),
reader.IsDbNull(Col2Index) ? null : reader.GetDateTime(Col4Index)));
它给出错误:
Compiler Error Message: CS0173: Type of conditional expression cannot be determined because there is no implicit conversion between '<null>' and 'System.DateTime'
在搜索解决方案后,我发现:Nullable type issue with ?: Conditional Operator。但是当我尝试使用该代码时,我不断获得) expected
。
我该如何解决这个问题?
答案 0 :(得分:8)
DateTime
是struct
,因此是值类型,不能是null
。只有引用类型和Nullable<>
类型可以为null。您必须使用Nullable<DateTime>
。这也可以写成DateTime?
。
DateTime? dt = null;
dt = DateTime.Now;
if (dt.HasValue) ...
if (dt == null) ...
DateTime x = dt.Value;
dt = reader.IsDBNull(Col2Index) ? (DateTime?)null : reader.GetDateTime(Col4Index);
答案 1 :(得分:8)
你错过了一个关闭括号。
client_group_details.Add(new ClientGroupDetails(
reader.IsDbNull(Col2Index) ? null : reader.GetString(Col2Index),
reader.IsDbNull(Col3Index) ? null : reader.GetString(Col3Index),
reader.IsDbNull(Col2Index) ? null : reader.GetDateTime(Col4Index)));
应该改为
client_group_details.Add(new ClientGroupDetails(
reader.IsDbNull(Col2Index) ? null : reader.GetString(Col2Index),
reader.IsDbNull(Col3Index) ? null : reader.GetString(Col3Index),
reader.IsDbNull(Col2Index) ? (DateTime?)null : reader.GetDateTime(Col4Index)));
或类似的东西。根据您的确切代码,某人可以告诉您缺少括号的位置。