使对象的属性为Nullable类型?

时间:2011-12-20 05:51:17

标签: c# asp.net

当我需要通过属性传递DBnull时,这是一个很好的做法。使它们成为可空类型。因为当我们需要通过我们的Variables将Null值传递给Backend时。我们将它们设为Nullable.But is this okay With Properties。

1 个答案:

答案 0 :(得分:2)

在某些情况下,你真的别无选择。例如,T-SQL bit数据类型(.NET中的类型BOOL);在T-SQL中,它可以是NULL,0或1.因此,您必须将其设置为NULLABLE类型,如下所示:

public bool? MySqlBitField { get; set; }

更新:我快速参考了来自Addison Wesley的Nullable类型的框架设计指南(Cwalina,Abrams)及其用法。我已经粘贴了书中的一些文字。顺便说一句,我强烈推荐这本书作为一个很好的一般参考。

来自书:

使用Nullable表示可能不存在的值的CONSIDER(即可选值)。例如,在使用表示可选表列的属性从数据库返回强类型记录时使用它。

除非你以类似的方式使用引用类型,否则不要使用Nullable,利用引用类型值可以为空的事实。

例如,您不会使用null来表示可选参数。

// bad design
public class Foo {
   public Foo(string name, int? id);
}

// good design
public class Foo {
   public Foo(string name, int id);
   public Foo(string name);
}

使用Nullable避免表示一般的三态值。 Nullable只应用于表示真正可选的布尔值:true,false和not available。如果您只想表示三种状态(例如,是,否,取消),请考虑使用枚举。

使用System.DBNull进行避免。更喜欢Nullable。

Pablo Castro的注释

Nullable通常是可选数据库值的更好表示。但要考虑的一件事是,虽然Nullable使您能够表示空值,但您不会获得数据库空操作语义。具体来说,您不会通过运算符和函数获得空传播。如果您非常关心传播语义,请考虑坚持使用DBNull。