Vb.net 有没有办法让IsDate(日期)返回为false?
我正在查看VB.net中的一些代码,在一个验证对象中,他们编写了以下代码Vb.net 有没有办法让IsDate(日期)返回为false?,vb.net,validation,Vb.net,Validation,我正在查看VB.net中的一些代码,在一个验证对象中,他们编写了以下代码 If Not IsDate(Entity.SelectedDate) Then ErrorList.Add(New CValidationError("MainReport", "Please select a weekend date")) SelectedDate的类型为Date。在我看来,要达到这种状态是不可能的。这是真的吗?我认为不可能达到这种状态。SelectedDate只能由calen
If Not IsDate(Entity.SelectedDate) Then
ErrorList.Add(New CValidationError("MainReport", "Please select a weekend date"))
SelectedDate的类型为Date。在我看来,要达到这种状态是不可能的。这是真的吗?我认为不可能达到这种状态。SelectedDate只能由calendar控件或OnSelectionChanged事件处理程序设置。即使如此,该值也只能设置为日期或空值。也许这应该检查以确保选择的值不为Null。否则,就干脆把支票全部扔掉。这样的错误永远不会发生。SelectedDate的类型为Date。因此,您要检查这是否是一个日期。对于任何可以转换为日期的对象,IsDate将始终返回true: 如果你这样做,它甚至会返回真值
dim myDate as Date
myDate = Nothing
IsDate(myDate)
说:
请注意,日期是一种值类型,
因此,不是引用类型
不给变量赋值
键入日期将其设置为默认值
价值(见拉尔斯所说)
因此IsDate(date)将始终返回true
值得仔细检查的是,IsDate指的是标准的VB函数,而不是其他地方编写的自定义函数(验证错误文本指的是周末日期,这似乎很奇怪,因此它可能是一个自定义函数)。右键单击它并“转到定义”以确保并查看VisualStudio的位置。如果它是Microsoft.VisualBasic命名空间中的一个,那么我会说它总是会返回true。看起来他们正在检查周末日期,那么为什么不检查DateTime.DayOfWeek的周六或周日呢 它确实是来自Microsoft.VisualBasic命名空间的IsDate;周末日期错误消息实际上是询问一周结束的日期,通常是星期五。现在看来很清楚,这将永远回到现实;感谢大家提供的资源和确认。以下是我在中看到的内容: 现在的问题是:如果传递一个
Date
(VB.NET的DateTime
值的关键字),这个方法会返回false吗
否。
If (Expression Is Nothing)
对于装箱的值类型,这将永远不会为真
If TypeOf Expression Is DateTime
如果方法显式地传递了日期
,则始终为真
即使当B
是A
的子类时typeofa是B
返回false(它不是),您仍然可以假设这将始终返回true,因为DateTime
作为值类型无法继承
所以你很好
我最好的猜测是,该代码最初在非强类型的
字符串
或对象
上被称为IsDate
;在某个时候,一定有人更新了SelectedDate
属性,将其键入为Date
,而没有费心更新此验证代码。这基本上是我的想法,似乎这只是他们添加到验证中的一个愚蠢错误,但我想我应该确定。谢谢你的回答。我的想法完全正确,即使是默认值(未实例化),它仍然是日期类型。你的第二个陈述不准确IsDate(Nothing)
将返回false。在您提供的链接中,提问者编写了dima As Date=Nothing
,它将a
分配给DateTime
类型的默认值(我认为是DateTime.MinValue
);所以他实际上没有把什么都不传递给IsDate
;他传递了默认的DateTime
值。回答得很好,非常清楚,组织得很好。非常感谢你!也许在某个时候Entity.SelectedDate不是日期类型?在这里查看相同类型的代码。我很确定我的代码中的值过去是字符串类型。嗨,linkrift,谢谢你的回复。通常你会将此作为对原始问题的评论,而不是单独的答案。
If TypeOf Expression Is DateTime