2015-11-05 60 views

回答

1

您不能直接將它投射到Nullable<bool>。但是你可以使用as操作:

bool? primaryFlag = reader["primaryflag"] as bool?; 

這工作,因爲如果該值DBNull.Value轉換失敗,所以它會正確地分配bool?null

或小於這個優雅版:

bool? primaryFlag = null; 
int colOrdinal = reader.GetOrdinal("primaryflag"); 
if(!reader.IsDBNull(colOrdinal)) 
    primaryFlag = reader.GetBoolean(colOrdinal); 
+0

的 '爲' 經營者的工作編輯。謝謝! =) –

0

,你必須也(bool?) null投下的null值。

2

問題是,在讀者的價值是從來沒有 a bool?

當然,如果轉換爲bool,那麼在三元組中將會出現錯誤,因爲編譯器沒有可以推斷出的常見類型。我用一個簡單的技巧,而不是:

reader["primaryFlag"] is DBNull ? default(bool?) : (bool)reader["primaryFlag"]; 

default(bool?)意味着完全一樣的東西在運行時null,但它使空「類型化」,至於編譯器而言。

這也是非常方便有此作爲一個擴展的方法,所以你可以做這樣的事情

reader.GetNullable<bool>("primaryFlag") 
0

有一個2級邏輯的解決方案: 1鑄造DB值所需的任務:

bool? primaryFlag = (bool?)reader["primaryflag"] 

2更simular到你的做法:

bool? primaryFlag = reader["primaryflag"] is DBNull ? (bool?) null: (bool)reader["primaryflag"];