2009-05-06 97 views
2

使用dotnet 2.0。下面的代碼可以改進風格嗎?可爲空的對象類型

private object GetObj_Version1(int? num) 
    { 
     return num ?? (object)DBNull.Value; 
    } 

演員對我來說看起來有點混亂。 版本2在下面避免了演員,但它的長篇大論:

private object GetObj_Version2(int? num) 
    { 
     object numObj; 
     if (num.HasValue) 
      numObj = num.Value; 
     else 
      numObj = DBNull.Value; 

     return numObj; 
    } 

你能想到這是短期和避免鑄件替代的? TIA。

+0

爲什麼你需要把一個可空類型轉換爲對象? – stevehipwell 2009-05-06 07:45:27

+0

返回的對象將用於設置System.Data.SqlClient.SqlParameter.Value。 – 2009-05-06 23:30:40

回答

6

在這種情況下,轉換在運行時什麼也不做 - 它純粹是編譯器。如果你真的討厭它,也許:

static readonly object NullObject = DBNull.Value; 
    private object GetObj_Version1(int? num) 
    { 
     return num ?? NullObject; 
    } 

但我會離開它自己。順便說一句 - 因爲你要呢框,你可以與過載免除,並且只是object工作 - 那麼你甚至都不需要static領域:

private object GetObj_Version1(object value) 
    { 
     return value ?? DBNull.Value; 
    } 
0

如果要將值插入數據庫,則可以直接將可空類型作爲過程的參數傳遞。

param.Add("@Param1", nullableParam); 
+0

不完全;如果nullableParam沒有值,那麼它將被裝箱到`null` - 並且不發送帶有`null`值的參數。因此,如果SP等存在非空默認值,那麼這會做一些不同的事情。當然,你可以使用它,然後在執行命令之前「修改」參數值。 – 2009-05-06 07:49:40

相關問題