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 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 Offline
    P Offline
    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