Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • World
  • Users
  • Groups
Skins
  • Light
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Default (No Skin)
  • No Skin
Collapse
Code Project
  1. Home
  2. The Lounge
  3. Sigh... Stupid Generics and Casting...

Sigh... Stupid Generics and Casting...

Scheduled Pinned Locked Moved The Lounge
htmldatabasecomsysadminquestion
15 Posts 9 Posters 0 Views 1 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • B Offline
    B Offline
    Brisingr Aerowing
    wrote on last edited by
    #1

    Well, I have spent about four hours trying to cast one generic type to another. I have been doing this for one of my projects, which allows multiple users and stores data in a database on a server. I have been using a dictionary to store the settings, and have the key and value as strings (I know that that will serialize), and have created two extension methods to get values and return a specified default if the key doesn't exist. The first returns the value as the type of the dictionary's value type, and the second casts it to a different type, returning the default if the cast fails. I finally was able to get it to work by using Convert.ChangeType(Object, Type) and casting the result to the specified return type. I will post a tip/trick if you guys want.

    Bill Gates is a very rich man today... and do you want to know why? The answer is one word: versions. Dave Barry Read more at [BrainyQuote](http://www.brainyquote.com/quotes/topics topic_technology.html#yAfSEbrfumitrteO.99)[^]

    P B C E J 5 Replies Last reply
    0
    • B Brisingr Aerowing

      Well, I have spent about four hours trying to cast one generic type to another. I have been doing this for one of my projects, which allows multiple users and stores data in a database on a server. I have been using a dictionary to store the settings, and have the key and value as strings (I know that that will serialize), and have created two extension methods to get values and return a specified default if the key doesn't exist. The first returns the value as the type of the dictionary's value type, and the second casts it to a different type, returning the default if the cast fails. I finally was able to get it to work by using Convert.ChangeType(Object, Type) and casting the result to the specified return type. I will post a tip/trick if you guys want.

      Bill Gates is a very rich man today... and do you want to know why? The answer is one word: versions. Dave Barry Read more at [BrainyQuote](http://www.brainyquote.com/quotes/topics topic_technology.html#yAfSEbrfumitrteO.99)[^]

      P Online
      P Online
      PIEBALDconsult
      wrote on last edited by
      #2

      Zac Greve wrote:

      Convert.ChangeType(Object, Type)

      :thumbsup: The only useful member of Convert.

      B 1 Reply Last reply
      0
      • B Brisingr Aerowing

        Well, I have spent about four hours trying to cast one generic type to another. I have been doing this for one of my projects, which allows multiple users and stores data in a database on a server. I have been using a dictionary to store the settings, and have the key and value as strings (I know that that will serialize), and have created two extension methods to get values and return a specified default if the key doesn't exist. The first returns the value as the type of the dictionary's value type, and the second casts it to a different type, returning the default if the cast fails. I finally was able to get it to work by using Convert.ChangeType(Object, Type) and casting the result to the specified return type. I will post a tip/trick if you guys want.

        Bill Gates is a very rich man today... and do you want to know why? The answer is one word: versions. Dave Barry Read more at [BrainyQuote](http://www.brainyquote.com/quotes/topics topic_technology.html#yAfSEbrfumitrteO.99)[^]

        B Offline
        B Offline
        BillWoodruff
        wrote on last edited by
        #3

        Well, congratulations, Zac; I do think this type of post should go on the C# forum: you might get some interesting other ideas. Hope you do post a tip/trick ! best, Bill

        "One of the few good things about modern times: If you die horribly on television, you will not have died in vain. You will have entertained us." Kurt Vonnegut

        B 1 Reply Last reply
        0
        • B BillWoodruff

          Well, congratulations, Zac; I do think this type of post should go on the C# forum: you might get some interesting other ideas. Hope you do post a tip/trick ! best, Bill

          "One of the few good things about modern times: If you die horribly on television, you will not have died in vain. You will have entertained us." Kurt Vonnegut

          B Offline
          B Offline
          Brisingr Aerowing
          wrote on last edited by
          #4

          Thanks, I will!

          Bill Gates is a very rich man today... and do you want to know why? The answer is one word: versions. Dave Barry Read more at [BrainyQuote](http://www.brainyquote.com/quotes/topics topic_technology.html#yAfSEbrfumitrteO.99)[^]

          1 Reply Last reply
          0
          • P PIEBALDconsult

            Zac Greve wrote:

            Convert.ChangeType(Object, Type)

            :thumbsup: The only useful member of Convert.

            B Offline
            B Offline
            Brisingr Aerowing
            wrote on last edited by
            #5

            Yeah, I was looking at the convert class in the documentation, and then it dawned on me.

            Bill Gates is a very rich man today... and do you want to know why? The answer is one word: versions. Dave Barry Read more at [BrainyQuote](http://www.brainyquote.com/quotes/topics topic_technology.html#yAfSEbrfumitrteO.99)[^]

            1 Reply Last reply
            0
            • B Brisingr Aerowing

              Well, I have spent about four hours trying to cast one generic type to another. I have been doing this for one of my projects, which allows multiple users and stores data in a database on a server. I have been using a dictionary to store the settings, and have the key and value as strings (I know that that will serialize), and have created two extension methods to get values and return a specified default if the key doesn't exist. The first returns the value as the type of the dictionary's value type, and the second casts it to a different type, returning the default if the cast fails. I finally was able to get it to work by using Convert.ChangeType(Object, Type) and casting the result to the specified return type. I will post a tip/trick if you guys want.

              Bill Gates is a very rich man today... and do you want to know why? The answer is one word: versions. Dave Barry Read more at [BrainyQuote](http://www.brainyquote.com/quotes/topics topic_technology.html#yAfSEbrfumitrteO.99)[^]

              C Offline
              C Offline
              Clifford Nelson
              wrote on last edited by
              #6

              If worse comes to worse there is always the dynamic type.

              B 1 Reply Last reply
              0
              • B Brisingr Aerowing

                Well, I have spent about four hours trying to cast one generic type to another. I have been doing this for one of my projects, which allows multiple users and stores data in a database on a server. I have been using a dictionary to store the settings, and have the key and value as strings (I know that that will serialize), and have created two extension methods to get values and return a specified default if the key doesn't exist. The first returns the value as the type of the dictionary's value type, and the second casts it to a different type, returning the default if the cast fails. I finally was able to get it to work by using Convert.ChangeType(Object, Type) and casting the result to the specified return type. I will post a tip/trick if you guys want.

                Bill Gates is a very rich man today... and do you want to know why? The answer is one word: versions. Dave Barry Read more at [BrainyQuote](http://www.brainyquote.com/quotes/topics topic_technology.html#yAfSEbrfumitrteO.99)[^]

                E Offline
                E Offline
                Ennis Ray Lynch Jr
                wrote on last edited by
                #7

                PITA, huh. I have stripped out generics in some places because of that "issue"

                Need custom software developed? I do custom programming based primarily on MS tools with an emphasis on C# development and consulting. I also do Android Programming as I find it a refreshing break from the MS. "And they, since they Were not the one dead, turned to their affairs" -- Robert Frost

                1 Reply Last reply
                0
                • C Clifford Nelson

                  If worse comes to worse there is always the dynamic type.

                  B Offline
                  B Offline
                  Brisingr Aerowing
                  wrote on last edited by
                  #8

                  In C#, not VB. And yes, I always have option strict on and never use goto! People who use that should go to some other line of work!

                  Bill Gates is a very rich man today... and do you want to know why? The answer is one word: versions. Dave Barry Read more at [BrainyQuote](http://www.brainyquote.com/quotes/topics topic_technology.html#yAfSEbrfumitrteO.99)[^]

                  A 1 Reply Last reply
                  0
                  • B Brisingr Aerowing

                    In C#, not VB. And yes, I always have option strict on and never use goto! People who use that should go to some other line of work!

                    Bill Gates is a very rich man today... and do you want to know why? The answer is one word: versions. Dave Barry Read more at [BrainyQuote](http://www.brainyquote.com/quotes/topics topic_technology.html#yAfSEbrfumitrteO.99)[^]

                    A Offline
                    A Offline
                    AspDotNetDev
                    wrote on last edited by
                    #9

                    Dynamic objects aren't what you are thinking. See here. Also, I'm not exactly sure what you are doing, but covariance and contravariance may be of use, though I don't understand them well myself.

                    Thou mewling ill-breeding pignut!

                    B 1 Reply Last reply
                    0
                    • A AspDotNetDev

                      Dynamic objects aren't what you are thinking. See here. Also, I'm not exactly sure what you are doing, but covariance and contravariance may be of use, though I don't understand them well myself.

                      Thou mewling ill-breeding pignut!

                      B Offline
                      B Offline
                      Brisingr Aerowing
                      wrote on last edited by
                      #10

                      I don't see anything about VB there. I think VB 12 (.NET 4.5) has introduced it, but I am not certain.

                      Bill Gates is a very rich man today... and do you want to know why? The answer is one word: versions. Dave Barry Read more at [BrainyQuote](http://www.brainyquote.com/quotes/topics topic_technology.html#yAfSEbrfumitrteO.99)[^]

                      A 1 Reply Last reply
                      0
                      • B Brisingr Aerowing

                        I don't see anything about VB there. I think VB 12 (.NET 4.5) has introduced it, but I am not certain.

                        Bill Gates is a very rich man today... and do you want to know why? The answer is one word: versions. Dave Barry Read more at [BrainyQuote](http://www.brainyquote.com/quotes/topics topic_technology.html#yAfSEbrfumitrteO.99)[^]

                        A Offline
                        A Offline
                        AspDotNetDev
                        wrote on last edited by
                        #11

                        Gotcha. I thought you meant that you were working in C#.

                        Thou mewling ill-breeding pignut!

                        B 1 Reply Last reply
                        0
                        • A AspDotNetDev

                          Gotcha. I thought you meant that you were working in C#.

                          Thou mewling ill-breeding pignut!

                          B Offline
                          B Offline
                          Brisingr Aerowing
                          wrote on last edited by
                          #12

                          I usually use VB, but I know C# as well, and use it if I need to (e.g. work with a 3rd party library/code files/etc.). I can also translate C# to VB and VB to C#, but use online converters (mostly Telerik Code Converter[^]) to convert large files.

                          Bill Gates is a very rich man today... and do you want to know why? The answer is one word: versions. Dave Barry Read more at [BrainyQuote](http://www.brainyquote.com/quotes/topics topic_technology.html#yAfSEbrfumitrteO.99)[^]

                          1 Reply Last reply
                          0
                          • B Brisingr Aerowing

                            Well, I have spent about four hours trying to cast one generic type to another. I have been doing this for one of my projects, which allows multiple users and stores data in a database on a server. I have been using a dictionary to store the settings, and have the key and value as strings (I know that that will serialize), and have created two extension methods to get values and return a specified default if the key doesn't exist. The first returns the value as the type of the dictionary's value type, and the second casts it to a different type, returning the default if the cast fails. I finally was able to get it to work by using Convert.ChangeType(Object, Type) and casting the result to the specified return type. I will post a tip/trick if you guys want.

                            Bill Gates is a very rich man today... and do you want to know why? The answer is one word: versions. Dave Barry Read more at [BrainyQuote](http://www.brainyquote.com/quotes/topics topic_technology.html#yAfSEbrfumitrteO.99)[^]

                            J Offline
                            J Offline
                            Jonathan C Dickinson
                            wrote on last edited by
                            #13

                            You can also just round-trip it via object, in C# terms (can't remember the VB, been 10 years since I used it):

                            var casted = (T)(object)someValue;

                            Assuming that someValue can actually be casted (as opposed to converted) to T.

                            He who asks a question is a fool for five minutes. He who does not ask a question remains a fool forever. [Chineese Proverb] Jonathan C Dickinson (C# Software Engineer)

                            B 1 Reply Last reply
                            0
                            • J Jonathan C Dickinson

                              You can also just round-trip it via object, in C# terms (can't remember the VB, been 10 years since I used it):

                              var casted = (T)(object)someValue;

                              Assuming that someValue can actually be casted (as opposed to converted) to T.

                              He who asks a question is a fool for five minutes. He who does not ask a question remains a fool forever. [Chineese Proverb] Jonathan C Dickinson (C# Software Engineer)

                              B Offline
                              B Offline
                              BobJanova
                              wrote on last edited by
                              #14

                              If the cast can be done, then you don't need object in there:

                              void SomeMethod<T>(List<T> list){
                              foreach(T item in list)
                              DoSomethingWith((U)item);
                              }

                              ... will work as long as T is castable to U.

                              D 1 Reply Last reply
                              0
                              • B BobJanova

                                If the cast can be done, then you don't need object in there:

                                void SomeMethod<T>(List<T> list){
                                foreach(T item in list)
                                DoSomethingWith((U)item);
                                }

                                ... will work as long as T is castable to U.

                                D Offline
                                D Offline
                                Daniel Grunwald
                                wrote on last edited by
                                #15

                                No, that will fail to compile unless T and U are known to be related at compile-time. See ยง6.2.7 "Explicit conversions involving type parameters" in the C# specification for an explanation.

                                1 Reply Last reply
                                0
                                Reply
                                • Reply as topic
                                Log in to reply
                                • Oldest to Newest
                                • Newest to Oldest
                                • Most Votes


                                • Login

                                • Don't have an account? Register

                                • Login or register to search.
                                • First post
                                  Last post
                                0
                                • Categories
                                • Recent
                                • Tags
                                • Popular
                                • World
                                • Users
                                • Groups