?
Solved

Return Multiple Types from Function

Posted on 2006-07-13
8
Medium Priority
?
211 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 672 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 664 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
Take Control of Web Hosting For Your Clients

As a web developer or IT admin, successfully managing multiple client accounts can be challenging. In this webinar we will look at the tools provided by Media Temple and Plesk to make managing your clients’ hosting easier.

 
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
 
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 664 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

Keep up with what's happening at Experts Exchange!

Sign up to receive Decoded, a new monthly digest with product updates, feature release info, continuing education opportunities, and more.

Question has a verified solution.

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

This tutorial demonstrates one way to create an application that runs without any Forms but still has a GUI presence via an Icon in the System Tray. The magic lies in Inheriting from the ApplicationContext Class and passing that to Application.Ru…
Calculating holidays and working days is a function that is often needed yet it is not one found within the Framework. This article presents one approach to building a working-day calculator for use in .NET.
Planning to migrate your EDB file(s) to a new or an existing Outlook PST file? This video will guide you how to convert EDB file(s) to PST. Besides this, it also describes, how one can easily search any item(s) from multiple folders or mailboxes…
Get the source code for a fully functional Access application shell with several popular security features that Access VBA application developers desire, but find difficult or impossible to figure out how to code. You get the source code for managi…
Suggested Courses

588 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