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. Poor var (C#)

Poor var (C#)

Scheduled Pinned Locked Moved The Lounge
csharpc++comdiscussion
62 Posts 36 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.
  • R Rei Miyasaka

    I remember Sun insisting at conferences several years ago that the unsafe keyword in C# would be its downfall. People are idiots.

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

    unsafe was named so 'scary' and buried under an extra compiler option that nearly no one is using it. I've seen code doing manual marshaling (Marshal.AllocHGlobal, Marshal.Copy, etc.) for P/Invoke calls which could have been replaced with a simple fixed block around the P/Invoke call.

    R 1 Reply Last reply
    0
    • B Brady Kelly

      How about looking for the variable name that should indicate it being a list, or do you declare List v1 = new List();? I would quickly scan down my list and find var studentList = new List();

      A Offline
      A Offline
      Anders 0
      wrote on last edited by
      #28

      Or even better:

      var students = new List();

      That way, you're not repeating yourself... ;)

      T B A 3 Replies Last reply
      0
      • B Brady Kelly

        How about looking for the variable name that should indicate it being a list, or do you declare List v1 = new List();? I would quickly scan down my list and find var studentList = new List();

        L Offline
        L Offline
        Luc Pattyn
        wrote on last edited by
        #29

        That is no good. var studentList = new List(); is bad in two ways: 1. now it will say "List" every time you need to reference your students collection, that is even more typing with var than without it; 2. if and when you decide to change your collection type (say to SortedList, Dictionary, whatever) you have to rename all those "studentList" references. And obviously List v1 = new List(); is very bad, it should have been List students = new List(); :)

        Luc Pattyn [Forum Guidelines] [My Articles]


        The quality and detail of your question reflects on the effectiveness of the help you are likely to get. Show formatted code inside PRE tags, and give clear symptoms when describing a problem.


        1 Reply Last reply
        0
        • H hairy_hats

          Maybe we could stick to the status quo but enforce column alignments à la Fortran to make all this scanning easier? ;)

          I hope you realise that hamsters are very creative when it comes to revenge. - Elaine

          G Offline
          G Offline
          Gary Wheeler
          wrote on last edited by
          #30

          Steve_Harris wrote:

          enforce column alignments à la Fortran

          Oh varf, er, barf.

          Software Zen: delete this;

          1 Reply Last reply
          0
          • T tec goblin

            I'll want you to explain me what you would use for a linq query that returns an anonymous type, or what is not enough strongly typed for you in the code var records = new List(); For me, var is a blessing. It saves me of repeating redundant information (why the hell would I want to say in the left AND the right hand side that this is a damned List of Records?).

            C Offline
            C Offline
            csharphacker
            wrote on last edited by
            #31

            I guess I don't get all the hoopla over var? What happens if you were to initialize your variables and use them elsewhere? List records = null; records = new List(); Also, what kind of overhead does var add to your applications when you use it everywhere? It's like a lot of new features in C# (don't get me started on extension methods). They were added to allow LINQ to be implemented, but should NOT be used in general, everyday programming tasks (unless you are using LINQ) Some mornings it just doesn't seem worth it to gnaw through the leather straps. - Emo Phillips

            1 Reply Last reply
            0
            • B Brady Kelly

              How about looking for the variable name that should indicate it being a list, or do you declare List v1 = new List();? I would quickly scan down my list and find var studentList = new List();

              N Offline
              N Offline
              Netblue
              wrote on last edited by
              #32

              Your kidding right? I have seen that code a million times written by other developers.

              Proudly drinking the finest Maryland craft beer. Visiting Maryland for business? First round is on me!

              1 Reply Last reply
              0
              • N Nish Nishant

                If you look at this week's poll forum, you can see some pretty nasty comments about the C# var keyword. People seem to have mistaken it to be equivalent to the VB6/COM VARIANT data type. A closer equivalent to the VB6/COM VARIANT would be C# 4.0's dynamic keyword. But to attack var based on some wrong assumptions is sad. Remember, all's fair in love and var ;P

                Regards, Nish


                Nish’s thoughts on MFC, C++/CLI and .NET (my blog)
                My latest book : C++/CLI in Action / Amazon.com link

                M Offline
                M Offline
                Mark J Miller
                wrote on last edited by
                #33

                I say, use it or don't but it doesn't really save you typing - ever heard of intellisense? Try it, count how many total keystrokes it takes to use var verses typing the whole thing out using intellisense as soon as you get the option. Most of the time you'll type more than 3 characters on the left side to declare the type, but intellisense will then give you the right side for free (1 keystroke to accept the selected type from the intellisense list). You break even - so that little girl w/ the cripped fingers == propaganda :P

                Code responsibly: OWASP.org Mark's blog: developMENTALmadness.blogspot.com Click here for Free Industry White Papers/Magazines! Bill Cosby - "A word to the wise ain't necessary - it's the stupid ones that need the advice."

                D 1 Reply Last reply
                0
                • L Lost User

                  And shopping. Especially if there is dicounted shoes and chocolate.

                  Visit http://www.notreadytogiveup.com/[^] and do something special today.

                  G Offline
                  G Offline
                  grgran
                  wrote on last edited by
                  #34

                  "shoe shopping" ??????? What kind of programmers are you hanging out with ... there is exactly one type of flip-flop ... cheap ... shopping is not really an issue. Chocolate is is only slightly more complicated, it comes in three forms; large, rich and "large and rich". The third is always perferred but not always available. :-)

                  1 Reply Last reply
                  0
                  • A AspDotNetDev

                    Yeah, this should have been thought of way long ago. Makes one wonder if any other languages have this feature.

                    P Offline
                    P Offline
                    Pascal Ganaye
                    wrote on last edited by
                    #35

                    Vb has it but they managed to re-use the dim keyword rather that creating a new var keyword. Normal Declarations (without using var):

                    C# : int x;
                    VB : dim x as integer

                    Using var (and Option Infer in VB)

                    C# : var x = 5;
                    VB : dim x = 5

                    Note that VB as also a nice compact dim ... as new ... syntax:

                    C# : var x = new Button();
                    VB : dim x as new Button()

                    Both language look very similar to me now.

                    A 1 Reply Last reply
                    0
                    • M Mycroft Holmes

                      I think calling anything "var" is a bad naming convention, that name has way too much baggage.

                      P Offline
                      P Offline
                      Pascal Ganaye
                      wrote on last edited by
                      #36

                      yes dim was better :-)

                      1 Reply Last reply
                      0
                      • N Nish Nishant

                        If you look at this week's poll forum, you can see some pretty nasty comments about the C# var keyword. People seem to have mistaken it to be equivalent to the VB6/COM VARIANT data type. A closer equivalent to the VB6/COM VARIANT would be C# 4.0's dynamic keyword. But to attack var based on some wrong assumptions is sad. Remember, all's fair in love and var ;P

                        Regards, Nish


                        Nish’s thoughts on MFC, C++/CLI and .NET (my blog)
                        My latest book : C++/CLI in Action / Amazon.com link

                        M Offline
                        M Offline
                        MiddleTommy
                        wrote on last edited by
                        #37

                        I dont understand var bashing. It is a shortcut use it or dont use it. You can turn intellisense off too. As for readability? I find var makes me digg to understand code more than using traditional static type declarations as a crutch. If var is confusing your understanding of code then your methods are too long and too complex. Also you can always hover over a variable to have visual studio tell you the type of a var declared object.

                        M 1 Reply Last reply
                        0
                        • A AspDotNetDev

                          Yeah, this should have been thought of way long ago. Makes one wonder if any other languages have this feature.

                          D Offline
                          D Offline
                          Dave Sexton
                          wrote on last edited by
                          #38

                          JavaScript. Or did you not mean to include dynamic languages?

                          But fortunately we have the nanny-state politicians who can step in to protect us poor stupid consumers, most of whom would not know a JVM from a frozen chicken. Bruce Pierson
                          Because programming is an art, not a science. Marc Clifton
                          I gave up when I couldn't spell "egg". Justine Allen

                          A 1 Reply Last reply
                          0
                          • M Mark J Miller

                            I say, use it or don't but it doesn't really save you typing - ever heard of intellisense? Try it, count how many total keystrokes it takes to use var verses typing the whole thing out using intellisense as soon as you get the option. Most of the time you'll type more than 3 characters on the left side to declare the type, but intellisense will then give you the right side for free (1 keystroke to accept the selected type from the intellisense list). You break even - so that little girl w/ the cripped fingers == propaganda :P

                            Code responsibly: OWASP.org Mark's blog: developMENTALmadness.blogspot.com Click here for Free Industry White Papers/Magazines! Bill Cosby - "A word to the wise ain't necessary - it's the stupid ones that need the advice."

                            D Offline
                            D Offline
                            Dan Neely
                            wrote on last edited by
                            #39

                            While not defending var itself, intellisense effectiveness depends on the type. For an extreme example start a winform app, begin typing DataGridViewRow, without scrolling you'll have to type all but the last two characters before the type is selected. Immediately before you type the second R it's on 'page 10' of the list. DataGridView itself is almost as bad because of the old DataGrid class.

                            The European Way of War: Blow your own continent up. The American Way of War: Go over and help them.

                            M 1 Reply Last reply
                            0
                            • N Nish Nishant

                              If you look at this week's poll forum, you can see some pretty nasty comments about the C# var keyword. People seem to have mistaken it to be equivalent to the VB6/COM VARIANT data type. A closer equivalent to the VB6/COM VARIANT would be C# 4.0's dynamic keyword. But to attack var based on some wrong assumptions is sad. Remember, all's fair in love and var ;P

                              Regards, Nish


                              Nish’s thoughts on MFC, C++/CLI and .NET (my blog)
                              My latest book : C++/CLI in Action / Amazon.com link

                              J Offline
                              J Offline
                              Jorgen Sigvardsson
                              wrote on last edited by
                              #40

                              I bet the same people would "hate" compilers if given the question.

                              -- Kein Mitleid Für Die Mehrheit

                              1 Reply Last reply
                              0
                              • D Dan Neely

                                While not defending var itself, intellisense effectiveness depends on the type. For an extreme example start a winform app, begin typing DataGridViewRow, without scrolling you'll have to type all but the last two characters before the type is selected. Immediately before you type the second R it's on 'page 10' of the list. DataGridView itself is almost as bad because of the old DataGrid class.

                                The European Way of War: Blow your own continent up. The American Way of War: Go over and help them.

                                M Offline
                                M Offline
                                Mark J Miller
                                wrote on last edited by
                                #41

                                Point well taken. Intellisense doesn't always save a whole lot of typing, but I'm referring to the right side of the declaration. Based on your example:

                                var row = new DataGridViewRow();
                                ^--

                                Here intellisense helps me after 27 characters, then I still need type type "();" taking the total to 30. Intellisense only saved me 2 characters. verses:

                                DataGridViewRow row = new DataGridViewRow();
                                ^-- ^--------------

                                Intellisense kicks in at 13 characters and completes the type and a space for me. Then I type 10 more taking the total to 23. Again, add 3 for "();" and I've typed a total of 26. Using var cost me 4 keystrokes. This is pretty common when comparing intellisense to var because (except when the left side is an interface) the type on the left matches the type on the right and so when you type "new " intellisense will give you the type which is on the left. The only keystroke I need at this point is [TAB]. I can even save an additional keystroke on the left side if I make my intellisense keystroke with [SPACEBAR] instead of [TAB]+[SPACEBAR].

                                Code responsibly: OWASP.org Mark's blog: www.developMENTALmadness.com Bill Cosby - "A word to the wise ain't necessary - it's the stupid ones that need the advice."

                                1 Reply Last reply
                                0
                                • M MiddleTommy

                                  I dont understand var bashing. It is a shortcut use it or dont use it. You can turn intellisense off too. As for readability? I find var makes me digg to understand code more than using traditional static type declarations as a crutch. If var is confusing your understanding of code then your methods are too long and too complex. Also you can always hover over a variable to have visual studio tell you the type of a var declared object.

                                  M Offline
                                  M Offline
                                  Mark J Miller
                                  wrote on last edited by
                                  #42

                                  I myself have no problem with var. But it isn't a shortcut (see my post above). In fact, your argument is contradicting. You're saying it forces you to dig in more and requires the additional step of hovering over the variable to understand the type. You're saying it's a shortcut, but what you're describing is additional work. Using var has its place, most especially when working with anonymous types. Another place I use it a lot is unit testing where I am declaring a variable which is an interface and assigning it the value of a mock or stub. But it hasn't ever saved me typing over intellisense except in the latter case. If you choose to use it as a convention because you prefer it, so be it. I won't argue with you and if I work on your project I wouldn't complain either. I don't care that much wither I use it or not. But stop saying it is a shortcut because it isn't unless you code in notepad (I've only ever met one developer who did). As an additional argument against hovering over code snippets, if you are writing an article in code project or posting in the forums you cannot get any help. Also, something I often do because I want to open a code file w/o the overhead of opening an entire project I will open a file in notepad when I don't already have it open - I do this because it saves me time (I have enough RAM to open as many instances of VS as I like). Again, I can't hover over it. So while there is nothing *wrong* with using var, saying it is a shortcut isn't *right*.

                                  Code responsibly: OWASP.org Mark's blog: www.developMENTALmadness.com Bill Cosby - "A word to the wise ain't necessary - it's the stupid ones that need the advice."

                                  M 1 Reply Last reply
                                  0
                                  • A Anders 0

                                    Or even better:

                                    var students = new List();

                                    That way, you're not repeating yourself... ;)

                                    T Offline
                                    T Offline
                                    tec goblin
                                    wrote on last edited by
                                    #43

                                    That's my favourite way too. You can see immediately that it's a collection.

                                    1 Reply Last reply
                                    0
                                    • H hairy_hats

                                      Possibly because if you want to find a List variable in a long list of declarations, it's much easier to run your eye down a vertical line of types on the left hand side of the = than to have to scan left and right on each line to find the declaration type. var for Linq queries I can see the value of, var for every declaration is confusing.

                                      I hope you realise that hamsters are very creative when it comes to revenge. - Elaine

                                      T Offline
                                      T Offline
                                      tec goblin
                                      wrote on last edited by
                                      #44

                                      Apart from the answers below, there is always 1) ctrl+f, 2) the fact that by writing less code you can find the info you need easier, it just sticks out.

                                      1 Reply Last reply
                                      0
                                      • T tec goblin

                                        I'll want you to explain me what you would use for a linq query that returns an anonymous type, or what is not enough strongly typed for you in the code var records = new List(); For me, var is a blessing. It saves me of repeating redundant information (why the hell would I want to say in the left AND the right hand side that this is a damned List of Records?).

                                        Y Offline
                                        Y Offline
                                        yassir hannoun
                                        wrote on last edited by
                                        #45

                                        +1 get resharper and you ll get vars everywhere :)

                                        1 Reply Last reply
                                        0
                                        • M Mark J Miller

                                          I myself have no problem with var. But it isn't a shortcut (see my post above). In fact, your argument is contradicting. You're saying it forces you to dig in more and requires the additional step of hovering over the variable to understand the type. You're saying it's a shortcut, but what you're describing is additional work. Using var has its place, most especially when working with anonymous types. Another place I use it a lot is unit testing where I am declaring a variable which is an interface and assigning it the value of a mock or stub. But it hasn't ever saved me typing over intellisense except in the latter case. If you choose to use it as a convention because you prefer it, so be it. I won't argue with you and if I work on your project I wouldn't complain either. I don't care that much wither I use it or not. But stop saying it is a shortcut because it isn't unless you code in notepad (I've only ever met one developer who did). As an additional argument against hovering over code snippets, if you are writing an article in code project or posting in the forums you cannot get any help. Also, something I often do because I want to open a code file w/o the overhead of opening an entire project I will open a file in notepad when I don't already have it open - I do this because it saves me time (I have enough RAM to open as many instances of VS as I like). Again, I can't hover over it. So while there is nothing *wrong* with using var, saying it is a shortcut isn't *right*.

                                          Code responsibly: OWASP.org Mark's blog: www.developMENTALmadness.com Bill Cosby - "A word to the wise ain't necessary - it's the stupid ones that need the advice."

                                          M Offline
                                          M Offline
                                          MiddleTommy
                                          wrote on last edited by
                                          #46

                                          I agree with you that in some situations it will not save you time. But I am all for uniformity. As a whole if you use var you will code faster. Not only Anonymous types is it a helper. In any Declaration not using the new keyword var comes out on top. Especially if you code like me and refactor a lot. example var coordinate = point.GetCoordinates(); if the return type of GetCoordinates ever changes you dont have to go fix all those declarations. Also often when you compile and a declaration is off further errors are not shown until you fix the declaration and recompile (unless you use Resharper). But to clarify when I said shortcut I was not thinking of keystrokes. Because of the "contradictions" you pointed out let me expound my explanation to un-contradict myself. When you understand the code you are working on Type declaration is not needed. Also The lack of type declaration does not slow you down. When you understand the code you are working on you can code faster because of that understanding. If using var forces you to understand the code better then in the long run you generally code faster. Also as far as I am concerned they should have let us do this coordinate = point.GetCoordinates(); Let the compiler figure out coordinate is a new variable and declare it. But that would have really upset some "C syntax" fan boys. Perhaps officially shortcut is the wrong word. Though I did not mean it the way you suggest I meant it. I could go on and on how var saves me time or shortcut in other words but Let me revoke shortcut and use shorthand instead. var is a shorthand that will save you time(IMHO)

                                          M 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