|
web
newsgroups
|
|||||||||||||||||||||||
|
|||||||||||||||||||||||
"Optional ByVal SomeDate As Date = Nothing" in VB2005represent "null dates" throughout all our code. We recently ran into an issue where we wanted an optional date parameter for a procedure. We weren't able to declare it with DateTime.MinValue as its default value, as MinValue is a read-only property rather than a constant. To work around, we had to use a "magic date" that we checked for later on. I was never very happy with that solution. Today however I noticed that VB2005 is quite happy with the following: \\\ Public Sub DoSomething(Optional ByVal SomeDate As Date = Nothing) [...] End Sub /// (I believe this fails to compile in VB2003). The value that is present in SomeDate if no date is provided by the calling code is DateTime.MinValue (i.e., the default value for an uninitialised date variable). Is this the intended documented behaviour of declaring the optional parameter in this way? Can I use this safe in the knowledge that the behaviour won't break or change in the next release of VB? Thanks, -- (O)enone "Oenone" <oen***@nowhere.com> schrieb: I don't think this is an optimal solution. Some alternative approaches are > In our applications, we use the special value of DateTime.MinValue to > represent "null dates" throughout all our code. demonstrated at <URL:http://dotnet.mvps.org/dotnet/articles/nullabledates/> (just ignore the text and check out the code snippets). > Today however I noticed that VB2005 is quite happy with the following: The value of 'DateTime.MinValue' is specified (see documentation).> > \\\ > Public Sub DoSomething(Optional ByVal SomeDate As Date = Nothing) > [...] > End Sub > /// > > (I believe this fails to compile in VB2003). > > The value that is present in SomeDate if no date is provided by the > calling code is DateTime.MinValue (i.e., the default value for an > uninitialised date variable). > Is this the intended documented behaviour of declaring the optional Yes, it is.> parameter in this way? Can I use this safe in the knowledge that the > behaviour won't break or change in the next release of VB? -- M S Herfried K. Wagner M V P <URL:http://dotnet.mvps.org/> V B <URL:http://classicvb.org/petition/> Oenone,
As Herfried suggests I would use a Nullable(Of DateTime) in .NET 2.0 to represent a "null date" (or one of the other methods in .NET 1.x) rather then a "special value". | Public Sub DoSomething(Optional ByVal SomeDate As Date = Nothing) It fails to compile in VB 2003, which feels like a bug as this is allowed:| [...] | End Sub | | (I believe this fails to compile in VB2003). Dim empty As DateTime = Nothing | Is this the intended documented behaviour of declaring the optional Rather then use an optional parameter I would use an overloaded method. | parameter in this way? Maybe ;-) Considering that Nullable(Of T) cannot be optional... Public Sub DoSomething() DoSomething(Nothing) End Sub Public Sub DoSomething(ByVal SomeDate As Nullable(Of Date)) End Sub | Can I use this safe in the knowledge that the I would think you would be safe, As I stated I consider the error in .NET | behaviour won't break or change in the next release of VB? 1.x above to be a bug. Nothing is defined (has always been defined) as the "default value" for a type. http://msdn2.microsoft.com/en-us/0x9tb07z(VS.80).aspx For reference types this means a null reference. For value types it means "all zeros" or False in the case of Boolean, For structures all its members are set to their defaults. In the case of DateTime this happens to be DateTime.MinValue. For example try: Dim empty As DateTime = Nothing Dim minValue As DateTime = DateTime.MinValue Debug.Assert(empty = minValue) -- Show quoteHide quoteHope this helps Jay B. Harlow [MVP - Outlook] ..NET Application Architect, Enthusiast, & Evangelist T.S. Bradley - http://www.tsbradley.net "Oenone" <oen***@nowhere.com> wrote in message news:ubkHdvGkGHA.1508@TK2MSFTNGP04.phx.gbl... | In our applications, we use the special value of DateTime.MinValue to | represent "null dates" throughout all our code. We recently ran into an | issue where we wanted an optional date parameter for a procedure. We weren't | able to declare it with DateTime.MinValue as its default value, as MinValue | is a read-only property rather than a constant. To work around, we had to | use a "magic date" that we checked for later on. I was never very happy with | that solution. | | Today however I noticed that VB2005 is quite happy with the following: | | \\\ | Public Sub DoSomething(Optional ByVal SomeDate As Date = Nothing) | [...] | End Sub | /// | | (I believe this fails to compile in VB2003). | | The value that is present in SomeDate if no date is provided by the calling | code is DateTime.MinValue (i.e., the default value for an uninitialised date | variable). | | Is this the intended documented behaviour of declaring the optional | parameter in this way? Can I use this safe in the knowledge that the | behaviour won't break or change in the next release of VB? | | Thanks, | | -- | | (O)enone | |
Streaming a file to text?
How to force upper case in a DataGridView column? Dealing with NULL values in Integer fields Mulples threads and impersonation Calling a batch file from vb.net with parameters What's the Best Startup Scenario for Unattended Server Execution? Handle pointers from delphi client to a vb.net dll VB.net 2005 splash screen Count Rcords writing a text in a file in vb.net not working properly |
|||||||||||||||||||||||