2009-05-06 96 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

相关问题