Solved

Return Multiple Types from Function

Posted on 2006-07-13
8
172 Views
Last Modified: 2012-05-05
Is it possible to write a function that would return values of multiple types, depending on input, and if so, how?  This is what my newbie-brain came up with...

Function GetKeyValue(Key(s), DataType) as ???
Dim x as integer
Dim y as single
Dim z as string

---  get key value from DB using Key(s), and based on Type indicated in DB, recast or select it into either x, y, or z

If Datatype = "INT" return x
If Datatype = "SGL" return y
if Datatype = "STR" return z
End Function

Any guidance on this would be appreciated.

Thanks!
0
Comment
Question by:codequest
8 Comments
 
LVL 17

Accepted Solution

by:
ZeonFlash earned 168 total points
ID: 17104739
The simple answer would be to set the return value as an Object, so:

Function GetKeyValue(Key(s), DataType) as Object
.
.
.
End Function

The bad part about that is that you won't know what type you're sending out, so by adding the datatype as a Referenced parameter, you can pass the return value type back.  Here's an example:

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Dim ReturnType As Type
        Dim ReturnObject As Object

        ReturnObject = GetKeyValue(1, ReturnType)

        Select Case ReturnType.Name
            Case "Single"
                MsgBox("Single")
            Case "Integer"
                MsgBox("Int32")
            Case "String"
                MsgBox("String")
        End Select
End Sub

Private Function GetKeyValue(ByVal myInt As Integer, ByRef ReturnType As Type) As Object
        ReturnType = GetType(System.String)
        ReturnType = GetType(System.Single)
        ReturnType = GetType(Integer)
        Return 5.2
End Function

Note that I just created a random parameter for the GetKeyValue function.  Fit it to whatever your function requires.
0
 
LVL 2

Author Comment

by:codequest
ID: 17105169
Thanks for the input.   Hmmm...You may have illustrated what to do, but I'm not quite getting it...

At a higher level, what I'm trying to do is get control values from key/value pairs stored in the DB.  
http://www.experts-exchange.com/Databases/Microsoft_SQL_Server/Q_21918874.html
I'm leaning toward having multiple columns in the control record, one for each data type...so I'd have to tell the GetValueFunction which column to look it in any case.

I "ought to" know at the time I go get the value what type it will be when I use it, so I can say

dim x as string = GetKeyValue("myvaluekey", "String")
or
dim y as integer = GetKeyValue("myvaluekey", "Integer")

But if I can't return the right type with a single function, then
>  if I return "object", will the "dim x as string" at the start of the line convert the object to type string for me?

Or do I need to cast it as string as it comes out of GetValueKey

dim y as integer = CINT(GetKeyValue("myvaluekey","Integer"))   and just return an object, knowing that it IS an integer?

Or do I need to call it with a separate function

dim y as integer GetKeyValueInteger("myvaluekey","Integer")

Much to learn here, any further help would be appreciated.
0
 
LVL 39

Assisted Solution

by:appari
appari earned 166 total points
ID: 17105198
if you are using .net 2.0
 may be you can try to use Generics.

for more information on Generics check these links on MSDN
http://msdn2.microsoft.com/en-us/library/79btc5zc.aspx
http://msdn2.microsoft.com/en-us/library/w256ka79.aspx
0
 
LVL 39

Expert Comment

by:appari
ID: 17105234
if you are using .net 2.0 and if you want to try generic classes post your existing code here.
0
Is Your Active Directory as Secure as You Think?

More than 75% of all records are compromised because of the loss or theft of a privileged credential. Experts have been exploring Active Directory infrastructure to identify key threats and establish best practices for keeping data safe. Attend this month’s webinar to learn more.

 
LVL 2

Author Comment

by:codequest
ID: 17105776
Thanks for inputs.  Lemme do the prelim read on generics and I'll get back here.  
0
 
LVL 10

Assisted Solution

by:gangwisch
gangwisch earned 166 total points
ID: 17105887
structure mystruct
dim i as integer
dim s as string
end structure

function test(myint as integer,mystr as string) as mystruct
dim st as mystruct
st.i = myint
st.s = mystr
return st
end function
0
 
LVL 2

Author Comment

by:codequest
ID: 17109602
gangwisch:  Thanks for input.  That's an interesting alternative...seems like pretty compact coding, too.
0
 
LVL 2

Author Comment

by:codequest
ID: 17141204
What I've concluded is that there's no "very simple" way to do this.  Generics might be it, though for my level of programming, they're past "very simple" already.

The inputs here have given me something to work with...I can see I'll have to run some test code to pick the best alternative.

Thanks for the ideas!
0

Featured Post

Is Your Active Directory as Secure as You Think?

More than 75% of all records are compromised because of the loss or theft of a privileged credential. Experts have been exploring Active Directory infrastructure to identify key threats and establish best practices for keeping data safe. Attend this month’s webinar to learn more.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Introduction When many people think of the WebBrowser (http://msdn.microsoft.com/en-us/library/2te2y1x6%28v=VS.85%29.aspx) control, they immediately think of a control which allows the viewing and navigation of web pages. While this is true, it's a…
Creating an analog clock UserControl seems fairly straight forward.  It is, after all, essentially just a circle with several lines in it!  Two common approaches for rendering an analog clock typically involve either manually calculating points with…
This tutorial gives a high-level tour of the interface of Marketo (a marketing automation tool to help businesses track and engage prospective customers and drive them to purchase). You will see the main areas including Marketing Activities, Design …
With the power of JIRA, there's an unlimited number of ways you can customize it, use it and benefit from it. With that in mind, there's bound to be things that I wasn't able to cover in this course. With this summary we'll look at some places to go…

863 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

21 Experts available now in Live!

Get 1:1 Help Now