首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在struct init中将null值赋给可为空的布尔值

在struct init中将null值赋给可为空的布尔值
EN

Stack Overflow用户
提问于 2016-03-23 04:36:11
回答 1查看 649关注 0票数 0

我已经搜索了堆栈溢出来寻找我的问题的答案,但是没有一个符合我的情况。

我有一个结构,它表示从存储过程中检索到的数据的模式。布尔型字段的数据类型可以为空,但是当返回的值为空时,我不能将该值赋给列表项。

Struct看起来像这样:

代码语言:javascript
复制
    public GuidelineSchema gl;
    public struct GuidelineSchema
    {
        public int id;
        public int GLtypeID;
        public int typeValue;
        public Nullable<bool> isInlineLayout;
        public int ResinGroupID;
        public int NotResinGroupID;
        public int ResinSubTypeID;
         .
         .
         .
    }

我在这里填充它

代码语言:javascript
复制
using (SqlDataReader sdr = cmd.ExecuteReader())
{
    while (sdr.Read())
    {
        GuidelineSchema gl = new GuidelineSchema() { 
        id = sdr.IsDBNull(0) ? 0 : sdr.GetInt32(0), 
         GLtypeID =  sdr.IsDBNull(1) ? 0 :sdr.GetInt32(1),
         typeValue = sdr.IsDBNull(2) ? 0 : sdr.GetInt32(2),
         //isInlineLayout = sdr.IsDBNull(3) ? (bool?)null : sdr.GetBoolean(3),
         //isInlineLayout = (bool?)sdr.GetSqlBoolean(3),//.GetBoolean(3),
         //isInlineLayout = (Nullable<Boolean>)sdr.GetBoolean(3),// sdr.IsDBNull(3) ?  : sdr.GetBoolean(3),//sdr.IsDBNull(3) ? false :                                                                 
         //isInlineLayout = sdr.IsDBNull(3) ? (bool?)null : sdr.GetSqlBoolean(3),
         isInlineLayout = sdr.GetBoolean(3),
         ResinGroupID = sdr.IsDBNull(4) ? 0 : sdr.GetInt32(4),
         NotResinGroupID = sdr.IsDBNull(5) ? 0 : sdr.GetInt32(5),
         .
         .
         .

仅当数据库值为null时,才会出现此问题。我已经尝试了所有不同的检查和强制转换,每次我得到错误。我已经阅读了sql数据类型,可以为空的数据类型。如果我将值设置为true或false (如果为null ),它就会起作用,但如果为null,我实际上需要它为null。

有谁知道我如何做到这一点,并允许值为空,而它应该是?

EN

回答 1

Stack Overflow用户

发布于 2016-03-23 04:42:14

试一试

代码语言:javascript
复制
isInlineLayout = sdr[3] as bool?

我们可以利用这样一个事实,即如果列值为空,数据读取器将返回DbNull.Value。如果值不能转换为bool?,则as操作符将生成一个null,而DbNull不能。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36164686

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档