Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > ASP .Net > Generics - type casting

Reply
Thread Tools

Generics - type casting

 
 
Random
Guest
Posts: n/a
 
      06-04-2007
I want to define a generics method so the user can determine what type they
expect returned from the method. By examining the generics argument, I
would determine the operation that needs to be performed and do just that.
However, out of the two possible ways of doing this, neither seems to work.

I thought I could either...

1) overload the method just based on the generics argument
Public Function GetData (Of T As SqlDataReader) (ByRef command as
SqlCommand) As T
...
End Function

Public Function GetData (Of T As DataSet) (ByRef command as SqlCommand) As T
...
End Function

....or...

2) determine the type without overloading and make sure to return the wanted
type
Public Function GetData (Of T) (ByRef command as SqlCommand) As T
Select Case True
Case TypeOf(T) Is GetType(SqlDataReader)
Return command.ExecuteReader()
Case TypeOf(T) Is GetType(DataSet)
.....(other code)
oDataAdapter.Fill(oDataSet)
Return oDataSet
End Select
End Function

But, #1 doesn't work because changing the generics type won't overload the
function, and #2 doesn't work because I get errors along the lines of "Value
of type '...' cannot be converted to 'T'"

I understand #1 not working, but as long as I'm playing it safe with the
type conversions, why can't I get #2 to work?



 
Reply With Quote
 
 
 
 
Samuel R. Neff
Guest
Posts: n/a
 
      06-04-2007

Might I suggest

Public Function GetDataSet(ByVal command As SqlCommand) As DataSet

and

Public Function GetDataReader(ByVal command As SqlCommand) As
SqlDataReader


If you use a generic method in this situation the user will always
have to specify the type with the method anyways, so building the type
into the method name is just as easy to use.

In short, this situation does not sufficiently benefit from using
Generics.

If you really want to do your #2, you need to add a DirectCast call to
get around the implicit conversion error.

HTH,

Sam


------------------------------------------------------------
We're hiring! B-Line Medical is seeking .NET
Developers for exciting positions in medical product
development in MD/DC. Work with a variety of technologies
in a relaxed team environment. See ads on Dice.com.


On Mon, 4 Jun 2007 09:17:18 -0700, "Random" <>
wrote:

>I want to define a generics method so the user can determine what type they
>expect returned from the method. By examining the generics argument, I
>would determine the operation that needs to be performed and do just that.
>However, out of the two possible ways of doing this, neither seems to work.
>
>I thought I could either...
>
>1) overload the method just based on the generics argument
>Public Function GetData (Of T As SqlDataReader) (ByRef command as
>SqlCommand) As T
> ...
>End Function
>
>Public Function GetData (Of T As DataSet) (ByRef command as SqlCommand) As T
> ...
>End Function
>
>...or...
>
>2) determine the type without overloading and make sure to return the wanted
>type
>Public Function GetData (Of T) (ByRef command as SqlCommand) As T
> Select Case True
> Case TypeOf(T) Is GetType(SqlDataReader)
> Return command.ExecuteReader()
> Case TypeOf(T) Is GetType(DataSet)
> .....(other code)
> oDataAdapter.Fill(oDataSet)
> Return oDataSet
> End Select
>End Function
>
>But, #1 doesn't work because changing the generics type won't overload the
>function, and #2 doesn't work because I get errors along the lines of "Value
>of type '...' cannot be converted to 'T'"
>
>I understand #1 not working, but as long as I'm playing it safe with the
>type conversions, why can't I get #2 to work?
>
>


 
Reply With Quote
 
 
 
 
Random
Guest
Posts: n/a
 
      06-04-2007
Thanks, Sam. Actually, being able to use the same method name will help
with the implementation part of what I'm doing.

And, I'd already tried both CType and DirectCast - still won't convert to
'T'.

I just tried a third way to fix this, and apparently if I specify Object as
the return type, I'm okay. Odd.

"Samuel R. Neff" <> wrote in message
news:...
>
> Might I suggest
>
> Public Function GetDataSet(ByVal command As SqlCommand) As DataSet
>
> and
>
> Public Function GetDataReader(ByVal command As SqlCommand) As
> SqlDataReader
>
>
> If you use a generic method in this situation the user will always
> have to specify the type with the method anyways, so building the type
> into the method name is just as easy to use.
>
> In short, this situation does not sufficiently benefit from using
> Generics.
>
> If you really want to do your #2, you need to add a DirectCast call to
> get around the implicit conversion error.
>
> HTH,
>
> Sam
>
>
> ------------------------------------------------------------
> We're hiring! B-Line Medical is seeking .NET
> Developers for exciting positions in medical product
> development in MD/DC. Work with a variety of technologies
> in a relaxed team environment. See ads on Dice.com.
>
>
> On Mon, 4 Jun 2007 09:17:18 -0700, "Random" <>
> wrote:
>
>>I want to define a generics method so the user can determine what type
>>they
>>expect returned from the method. By examining the generics argument, I
>>would determine the operation that needs to be performed and do just that.
>>However, out of the two possible ways of doing this, neither seems to
>>work.
>>
>>I thought I could either...
>>
>>1) overload the method just based on the generics argument
>>Public Function GetData (Of T As SqlDataReader) (ByRef command as
>>SqlCommand) As T
>> ...
>>End Function
>>
>>Public Function GetData (Of T As DataSet) (ByRef command as SqlCommand) As
>>T
>> ...
>>End Function
>>
>>...or...
>>
>>2) determine the type without overloading and make sure to return the
>>wanted
>>type
>>Public Function GetData (Of T) (ByRef command as SqlCommand) As T
>> Select Case True
>> Case TypeOf(T) Is GetType(SqlDataReader)
>> Return command.ExecuteReader()
>> Case TypeOf(T) Is GetType(DataSet)
>> .....(other code)
>> oDataAdapter.Fill(oDataSet)
>> Return oDataSet
>> End Select
>>End Function
>>
>>But, #1 doesn't work because changing the generics type won't overload the
>>function, and #2 doesn't work because I get errors along the lines of
>>"Value
>>of type '...' cannot be converted to 'T'"
>>
>>I understand #1 not working, but as long as I'm playing it safe with the
>>type conversions, why can't I get #2 to work?
>>
>>

>



 
Reply With Quote
 
Samuel R. Neff
Guest
Posts: n/a
 
      06-04-2007

But if you specify Object as a return type then there's really no
point in using Generics....

Was the error different when you tried using DirectCast ?

Sam

------------------------------------------------------------
We're hiring! B-Line Medical is seeking .NET
Developers for exciting positions in medical product
development in MD/DC. Work with a variety of technologies
in a relaxed team environment. See ads on Dice.com.


On Mon, 4 Jun 2007 09:50:15 -0700, "Random" <>
wrote:

>Thanks, Sam. Actually, being able to use the same method name will help
>with the implementation part of what I'm doing.
>
>And, I'd already tried both CType and DirectCast - still won't convert to
>'T'.
>
>I just tried a third way to fix this, and apparently if I specify Object as
>the return type, I'm okay. Odd.
>


 
Reply With Quote
 
Random
Guest
Posts: n/a
 
      06-04-2007
Nope. No difference in error when using DirectCast.

By passing in the type (I also found out I could just pass in Type as a
parameter and that works, too), I can discover how my method needs to
perform.

"Samuel R. Neff" <> wrote in message
news:...
>
> But if you specify Object as a return type then there's really no
> point in using Generics....
>
> Was the error different when you tried using DirectCast ?
>
> Sam
>
> ------------------------------------------------------------
> We're hiring! B-Line Medical is seeking .NET
> Developers for exciting positions in medical product
> development in MD/DC. Work with a variety of technologies
> in a relaxed team environment. See ads on Dice.com.
>
>
> On Mon, 4 Jun 2007 09:50:15 -0700, "Random" <>
> wrote:
>
>>Thanks, Sam. Actually, being able to use the same method name will help
>>with the implementation part of what I'm doing.
>>
>>And, I'd already tried both CType and DirectCast - still won't convert to
>>'T'.
>>
>>I just tried a third way to fix this, and apparently if I specify Object
>>as
>>the return type, I'm okay. Odd.
>>

>



 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
Re: Dynamic Casting with Generics: Type Erasure Problems William Java 16 03-05-2011 05:28 AM
Re: Dynamic Casting with Generics: Type Erasure Problems William Java 3 03-04-2011 06:08 PM
Dynamic Casting with Generics: Type Erasure Problems William Java 5 03-03-2011 06:22 PM
Re: Type casting- a larger type to a smaller type pete C Programming 4 04-02-2004 05:19 PM
Re: Type casting- a larger type to a smaller type heyo C Programming 3 04-01-2004 06:35 PM



Advertisments
 



1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57