"gregory_may" <None> wrote in message
:
: : >
: > gregory_may wrote:
: >>
: >> : >>
: >>> gregory_may wrote:
: >>>
: >>>> Is it possible to return "nothing" from an Integer function?
: >>>> This seems to give me "0" rather than "nothing".
: >>>>
: >>>> Private Function MyFunction() As Integer
: >>>>
: >>>>
: >>>> Return Nothing
: >>>>
: >>>> End Function
: >>>>
: >>>>
: >>> Since an Integer is not a Reference type, no you can't.
: >>>
: >>> Nothing can only be returned for "pointers"
: >>>
: >>> Chris
: >>
: >>
: >> So, how could I define this function to return "nothing" or
: >> an integer? Is this possible?
: >
: > No, you will have to return a reference type to check for nothing.
: > If you are trying to catch when something bad happens and can not
: > return a value like -1 to indicate it, you can throw an exception.
: >
: > Chris
:
: That's a good idea.
:
: Thanks!
:
: I did find this:
:
http://nullabletypes.sourceforge.net/
:
: But, not sure I want to tackle it.
Why not? The nullable type sounds like it may serve your needs. Consider
the
following code block (note that this is new to version 2.0 of the
framework):
'------------------------------------------------
Option Strict
Imports Microsoft.VisualBasic
Imports System
Public Module [module]
Public Sub Main()
Dim n0 As Nullable(Of Integer)
n0 = GetNullValue()
PrintValue(n0)
n0 = GetValue()
PrintValue(n0)
Dim n1 As Integer = CType((GetValue), Integer)
PrintValue(n1)
Dim n2 As Short = CType((GetValue), Short)
PrintValue(n2)
PrintValue(Nothing)
PrintValue(100)
End Sub
Public Sub PrintValue(n As Nullable(Of Integer))
If n.HasValue Then
Console.WriteLine("n = " & n.Value)
Else
Console.WriteLine("n is a null value")
End If
End Sub
Public Function GetValue() As Nullable(Of Integer)
Return 0
End Function
Public Function GetNullValue() As Nullable(Of Integer)
Return Nothing
End Function
End Module
'------------------------------------------------
This generates the following output:
'------------------------------------------------
n is a null value
n = 0
n = 0
n = 0
n is a null value
n = 100
'------------------------------------------------
The earlier suggestion of using -1 or throwing an exception are valid
approaches but exceptions can penalize performance and should be used
sparingly. Exceptions are for exceptional conditions. If what your are
trying to capture with the null value is a normal event, throwing and
catching exceptions may be excessive.
On the other hand, using a value such as -1 to flag something only works
if -1 isn't a valid value otherwise. And it has the additional drawback of
requiring anyone using the function to know the significance of that value
before hand.
If any of these limitations adversely affect what you are trying to do,
I'd
say try the nullable type approach and see what it does for you.
HTH
Ralf
--
--
----------------------------------------------------------
* ^~^ ^~^ *
* _ {~ ~} {~ ~} _ *
* /_``>*< >*<''_\ *
* (\--_)++) (++(_--/) *