我一直在寻找,但没有找到解决办法。如何处理应该能够包含未初始化值(相当于null)的DateTime ?我有一个类,它可能有一个DateTime属性值设置或没有。我正在考虑将属性持有人初始化为DateTime。MinValue,然后可以很容易地检查。我想这是一个很常见的问题,你是怎么做到的?
当前回答
如果你使用。net 2.0(或更高版本),你可以使用可空类型:
DateTime? dt = null;
or
Nullable<DateTime> dt = null;
之后:
dt = new DateTime();
你可以用:
if (dt.HasValue)
{
// Do something with dt.Value
}
或者你可以这样用:
DateTime dt2 = dt ?? DateTime.MinValue;
你可以在这里阅读更多: http://msdn.microsoft.com/en-us/library/b3h38hb0.aspx
其他回答
给定日期/时间数据类型的性质,它不能包含空值,即它需要包含一个值,它不能为空或不包含任何内容。如果将日期/时间变量标记为空,则只能为其分配空值。所以你要做的是两件事中的一件(可能还有更多,但我只能想到两件):
如果变量没有值,则为其分配一个最小日期/时间值。您也可以指定一个最大日期/时间值-任何适合您的方式。只要确保在检查日期/时间值时在站点范围内保持一致即可。决定使用min或max,并坚持使用它。 将日期/时间变量标记为空。这样,如果没有变量,可以将日期/时间变量设置为null。
让我用一个例子来说明我的第一点。DateTime变量类型不能设置为空,它需要一个值,在这种情况下,如果没有值,我将把它设置为DateTime的最小值。
我的场景是我有一个BlogPost类。它有许多不同的字段/属性,但在这个例子中我只选择了两个。DatePublished是文章发布到网站的时间,必须包含日期/时间值。DateModified是当一个帖子被修改时,所以它不必包含一个值,但可以包含一个值。
public class BlogPost : Entity
{
public DateTime DateModified { get; set; }
public DateTime DatePublished { get; set; }
}
使用ADO。NET从数据库中获取数据(分配DateTime. NET)。MinValue是没有值):
BlogPost blogPost = new BlogPost();
blogPost.DateModified = sqlDataReader.IsDBNull(0) ? DateTime.MinValue : sqlDataReader.GetFieldValue<DateTime>(0);
blogPost.DatePublished = sqlDataReader.GetFieldValue<DateTime>(1);
您可以通过将DateModified字段标记为可空来实现我的第二点。现在你可以设置它为空,如果没有值:
public DateTime? DateModified { get; set; }
使用ADO。NET从数据库中获取数据,它看起来与上面的方式有点不同(分配null而不是DateTime.MinValue):
BlogPost blogPost = new BlogPost();
blogPost.DateModified = sqlDataReader.IsDBNull(0) ? (DateTime?)null : sqlDataReader.GetFieldValue<DateTime>(0);
blogPost.DatePublished = sqlDataReader.GetFieldValue<DateTime>(1);
我希望这有助于澄清任何困惑。考虑到我的回答是大约8年后,你现在可能是一个c#编程专家:)
对于普通的DateTime,如果你根本不初始化它们,那么它们将匹配DateTime。MinValue,因为它是一个值类型而不是引用类型。
你也可以使用一个可空的DateTime,像这样:
DateTime? MyNullableDate;
或较长的形式:
Nullable<DateTime> MyNullableDate;
最后,有一种内置的方式来引用任何类型的默认值。对于引用类型,这将返回null,但对于我们的DateTime示例,它将返回与DateTime相同的值。MinValue:
default(DateTime)
或者,在c#的最新版本中,
default
如果你有时期望null,你可以使用这样的东西:
var orderResults = Repository.GetOrders(id, (DateTime?)model.DateFrom, (DateTime?)model.DateTo)
在存储库中使用可空datetime。
public Orders[] GetOrders(string id, DateTime? dateFrom, DateTime? dateTo){...}
我会考虑使用可空类型。
DateTime吗?myDate而不是DateTime。
您可以将DateTime设置为Nullable。默认情况下DateTime不是空的。有几种方法可以使它为空。在类型DateTime后使用问号?myTime或使用泛型样式Nullable。
DateTime? nullDate = null;
or
DateTime? nullDate;
推荐文章
- Linq-to-Entities Join vs GroupJoin
- 为什么字符串类型的默认值是null而不是空字符串?
- 在list中获取不同值的列表
- 组合框:向项目添加文本和值(无绑定源)
- 为什么在JavaScript的Date构造函数中month参数的范围从0到11 ?
- 在Windows批处理脚本中格式化日期和时间
- 如何为ASP.net/C#应用程序配置文件值中的值添加&号
- 从System.Drawing.Bitmap中加载WPF BitmapImage
- 如何找出一个文件存在于c# / .NET?
- 为什么更快地检查字典是否包含键,而不是捕捉异常,以防它不?
- [DataContract]的命名空间
- string. isnullorempty (string) vs. string. isnullowhitespace (string)
- 完全外部连接
- 如何增加日期时间一天?
- 在foreach循环中编辑字典值