Freigeben über


What annoys me when writing generic functions in Visual Studio...

When writing a generic function I start from left to right (the same way I write most things except when I took Yiddish in college).  For example, Lets say I am writing a simple generic method which return the first element of a generic list. I want the signature of this method to be:

 private T First<T>(List<T> list)

 

I start by writing the visibility:

 private 

I then need to write the return type so I type T.  The problem is that since T is not defined as a generic type parameter yet so intellisense tries to help me out by showing me all types that begin with T:

image

 

Now my instinct here (every time) is to press space since I just want to move on to the next word since T is all I want.  But space will auto-complete T with ThreadStaticAtrribute.  What I need to do is press esc to close the intellisense window and then press space.  This may seems like a silly issue, but I seem to never remember that I need to do this.

Visual Studio and intellisense have done nothing wrong here , I just wish intellisense had the ability to read my mind and understand exactly what I am intended to do.  It could save me a couple key presses a day!

Comments

  • Anonymous
    October 14, 2008
    Yea, it's annoying. Of course, it's also annoying you have to specify the return type and generic parameters at all :).

  • Anonymous
    October 14, 2008
    Actually, yes, VS is the culprit here - it really should learn the generic syntax and try to figure out that you're typing a generic. I.e., when typing "<" after an identifier in the class scope when it can only be a method/property/event declaration (which means that it already has a return type), do not show that dropdown. Actually, I often think that Java guys were right when they lifted the generic arguments outside the signature, as in: public <T> T First(List<T> list). It reads quite naturally if you treat <T> as "for all T" (which is the way it should be), and has proper lexical scoping in a sense that you first introduce the symbol, and only then use it. That also helps code completion to not be confused when parsing the return type.

  • Anonymous
    October 15, 2008
    I am confused by "I.e., when typing "<" after an identifier in the class scope when it can only be a method/property/event declaration (which means that it already has a return type), do not show that dropdown." For me it does not show the dropdown (unless I am misunderstanding what you mean).  For example if I am define a method: private void Matt<T At that point no drop down appears. About your second point, I havn't use generics in java yet but that isnt a bad way to do it.  It does make a lot of sense listing the type variables the function is parameterized over.

  • Anonymous
    October 15, 2008
    Yes this is very annoying.  It's interesting that of the 4 main languages of VS (C#,VB,C++ and F#) only C# has this issue.  Namely because it's the only one of the languages who uses a generic type before it's specified.  The othre three languages will define the generic (left -> right) before ever using it.

  • Anonymous
    October 22, 2008
    why not uncheck "commited by pressing the space bar" in IntelliSense options?

  • Anonymous
    October 22, 2008
    Because I like it commiting by pressing space bar :) I like it all the time except in this generic function definition case.