2012-01-30 35 views
2

我開發DNN模塊,並使用公共類classNameInfo:IHydratable(C#)DNN C#模塊設備 - 空值

有人能解釋爲什麼這個代碼總是從DB返回0:

System.Nullable<int> _ProductID; 
_ProductID = (oReader["ProductID"] == System.DBNull.Value ? null : (int?)oReader["ProductID"]); 

雖然此代碼返回正確的值?

int? y = (oReader["ProductID"] == System.DBNull.Value ? null : (int?)oReader["ProductID"]); 
if (y != null) 
{ 
_ProductID = (int)oReader["ProductID"]; 
} 
else 
{ 
_ProductID = 0; 
} 

回答

3

如果嘗試anything轉換爲int?,它只會如果類型說anything正是 INT工作。其他所有直接轉換都將失敗。由於數據庫類型從未「完全是int」,因此該轉換無法工作。

爲了使代碼更短,可以用下面的語句:

_ProductID = oReader["ProductID"] == System.DBNull.Value ? new int?() : (int)oReader["ProductID"]; 
+0

謝謝,托比亞斯。那麼,你是否贊同我在這裏採用的方法(除了代碼編寫方法)?感謝您的短代碼:) – 2012-01-31 14:45:30