可空列舉
在使用列舉的時候的,經常希望可以對列舉賦值為null,或者清空列舉值。但是常用的列舉,就是固定的幾項。而且不能對值型別賦值為null。如何來實現可空列舉?
要求保留到資料庫中的值,需要為null。這種情況在業務開發中經常出現。
儘管問題較小,但是可以**下解決方案,找到一種最優解。
方法1:將儲存值定義可空型別
/// /// 單據狀態,記錄列舉值
///
public int? state
可行,如果為空,則資料庫儲存的值也為null.
缺點:不方便我們對列舉進行展現和賦值,通常直接使用列舉,參見方法2。
方法2:定義列舉字段,並將其定義為可空型別
/// /// 狀態
///
public recordstate? state
這種方法較上面的方法較好,同樣能夠實現此功能。
缺點:通常列舉值的展現是展現列舉的所有項,一般使用下拉框,必須選中一項。這樣無法實現可空情況。如果要實現所需功能,需要在顯示時,做下處理,加入空項。
3.1 定義列舉:
/// /// 單據
///
public class doc
/// /// 單據狀態
///
public recordstate state
/// /// 建構函式
///
public doc()
}
3.2 使用列舉:
/// /// 單據
///
public class doc
/// /// 單據狀態
///
public recordstate state
/// /// 建構函式
///
public doc()
}
下面是資料時需要特別注意的:
寫入資料庫時,處理情況,引數賦值情況,這樣其資料庫的值才為null,
sqlparameter param = new sqlparameter("state",sqldbtype.smallint);
if (doc.state == recordstate.none)
else
載入物件時:載入出來又是列舉項
//sqldatareader reader
doc doc = new doc();
if (reader["state"] == dbnull.value)
else
C 可空型別的實現原理
int?是可為null的值型別。只比int多乙個值就是null。思考 同樣的記憶體空間,怎麼實現的多乙個值的?都是4位元組,32位,int?靠什麼存在乙個null值的。發現 分析一下記憶體,看看如何實現。給j賦值null,原來的1變為0.給j賦值0,原來的0變為1.j賦值1,還是1.j賦值負數,還是...
c 的可空型別
t variablet 可空型別的基本型別,variable 表示可空型別的變數,表示可空型別 如果未賦初值,則判定為null 可空型別包含hasvalue和value兩個屬性 其中hasvalue為bool,value為該例項的值 可空型別的例項只包含乙個方法 getvalueordefault ...
C 中的匿名方法與可空型別
1.匿名方可以把程式設計步驟放入乙個委託中,以後需要時再執行委託,如不使用匿名方法,可使用下列方法使用委託 public partial class defualt aspx void page load object sent,eventagrs e this.button.click butto...