Vb.net 有没有办法让IsDate(日期)返回为false?

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

我正在查看VB.net中的一些代码,在一个验证对象中,他们编写了以下代码

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