C# 作为属性的可空类型

C# 作为属性的可空类型,c#,datetime,nullable,C#,Datetime,Nullable,可以用这种类型构造对象实体吗 public class Patient { public Datetime? AdmissionDate { get; set; } public double? AdmissionFee { get; set } public int? RoomNumber { get; set } } 如果我在我所有的实体中都实现了这一点,那么缺点是什么呢?因为最近,我总是遇到这样的情况,我真的需要将值设置

可以用这种类型构造对象实体吗

   public class Patient
   {
        public Datetime? AdmissionDate { get; set; }
        public double? AdmissionFee { get; set }
        public int? RoomNumber { get; set }
    }
如果我在我所有的实体中都实现了这一点,那么缺点是什么呢?因为最近,我总是遇到这样的情况,我真的需要将值设置为null,特别是在DateTime中。我当前的解决方案是将DateTime.MinValue放在从数据库中获取null datetimes记录时,以及当我将结果显示到Ui时,我只是这样检查一下

    if (patient.AdmissionDate == Datetime.MinValue)
    {
         DisplayAdmissionDate(string.empty)
    }
    else
     {
        DisplayAdmissionDate(patient.AdmissionDate)
    }

是的,在gridview中,我必须把它放在Databound事件上,所以当我有一百万个数据要显示时,我认为检查datetime的每个循环不是最优雅的方式,所以,对于这个问题,我发现了这个?类型,我可以在其中放置null值,并且我计划对我的所有属性进行加密,因此在将来,将null值放置到此值类型不会有问题。有什么建议吗?TIA

对象始终应包含至少一个不可为空的ValueType作为主键。在您的情况下,您应该使用

public int ID {get;set;}
这样,您始终可以识别对象。其余属性可以为空

对nullable的检查非常好,除非GridView已经能够自己检测到这一点。可空类型的引入正是为了实现这一目的,它允许ValueType将
null
作为值。性能方面应该是最小的,这在任何方面都不复杂,优化它将是过早优化的情况


如果你想了解更多关于
Nullable
实现的信息,请看一看(遗憾的是,原来的页面已经关闭,因此webcache版本必须足够。虽然代码可读,但博客帖子有点破损).

可空类型的缺点是,在对其进行操作之前,必须始终检查它们是否有值

if(AdmissionFee.HasValue) total += AdmissionFee;
而不仅仅是

total += AdmissionFee;

您可能会遇到数据绑定的问题,我认为WinForms不能很好地处理,因为它早于可空类型


如果一个项目在现实生活中可以为null,那么可以为null的类型是一个很好的解决方案,因为它清楚地表明了这一点。然而,不要仅仅为了它而使用它们。

这是一种情况,没有单一的、教条式的答案涵盖所有情况。

始终使用可为null的类型(或始终避免使用它们)是无法避免的。你应该考虑每个案例,并使用你真正需要的案例

您提到您经常需要一个可空的
DateTime
。那么,在这种情况下,为什么不能使用
DateTime?
?这应独立于所有其他字段,尤其是
int
s

可空类型中的
null
值旨在表示该值类似于未指定、不可用或未知。在许多情况下,这个概念都存在(例如,网站上的用户可能指定或不指定他们的出生日期,因此应该是
日期时间?
),但也有许多情况下,这个概念毫无意义(例如,列表中的项目数-如果列表本身不是空的,那么它显然有一定数量的项目,因此应该是
int
,而不是
int?
)。

根据:

避免从属性获取程序引发异常


由于
SomeNullableProperty.Value
可以抛出一个
NullReferenceException
,我想说,您的getter中至少应该有一个逻辑,以确保有一个默认值。

绝对正确,但我的观点是,使用nullableproperty类型有什么缺点吗?在性能或设计上?在您的情况下没有缺点。请你能更新这个链接吗?:)谢谢,不过这不是什么麻烦事。。总计+=录取费??0^^与其说是输入几个额外字符的麻烦,不如说是可读性。而且,如果您知道某个值永远不会为null,请不要将其设为null…“当我有一百万个数据要显示时”-通常没有充分的理由一次为一个用户显示超过一百条左右的记录。