可空列舉的實現方法

2021-05-28 09:39:17 字數 1585 閱讀 4774

可空列舉

在使用列舉的時候的,經常希望可以對列舉賦值為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...