[英]Assigning null value to nullable boolean in struct init
我一直在尋找堆棧溢出的問題的答案,但是沒有任何一種情況適合我。
我有一個結構,它表示從存儲過程檢索的數據的架構。 布爾字段的數據類型可以為空,但是當返回的值為空時,我無法將值分配給列表項。
結構看起來像這樣:
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;
.
.
.
}
我在這里填充
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),
.
.
.
僅當db值為null時,才會出現此問題。 每次收到錯誤時,我都會嘗試所有不同的檢查和強制轉換。 我已經閱讀了sql數據類型,可為空的數據類型。 如果我將值設置為true或false(如果為null),則可以使用,但是如果為null,則實際上我需要將其設置為null。
任何人都知道如何完成此工作並允許該值在應為null時為空?
嘗試
isInlineLayout = sdr[3] as bool?
我們可以利用以下事實:如果列值為null,則數據讀取器將返回DbNull.Value。 如果不能將值強制轉換為bool ?,則as運算符將產生null,而DbNull則不能。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.