Visual Studio

Welcome to the Visual Studio UserVoice site. Let us know what you would like to see in future versions of the Visual Studio suite of products. This site is for suggestions and ideas. If you need to file a bug, visit the Visual Studio Connect site: http://connect.microsoft.com/visualstudio.

ASP.NET Runtime/Web Tooling suggestions have moved! All your ideas, including your votes, have been transferred and are searchable in the ASP.Net Uservoice forum. Please submit any new ASP.NET Runtime/Web Tooling suggestions, or vote on existing suggestions by going to http://aspnet.uservoice.com.

We look forward to hearing from you!

Thanks – Deon Herbert
Visual Studio Team

Terms of Service and Privacy Policy

I suggest you ...

You've used all your votes and won't be able to post a new idea, but you can still search and comment on existing ideas.

There are two ways to get more votes:

  • When an admin closes an idea you've voted on, you'll get your votes back from that idea.
  • You can remove your votes from an open idea you support.
  • To see ideas you have already voted on, select the "My feedback" filter and select "My open ideas".
(thinking…)

Enter your idea and we'll search to see if someone has already suggested it.

If a similar idea already exists, you can vote and comment on it.

If it doesn't exist, you can post your idea so others can vote on it.

Enter your idea and we'll search to see if someone has already suggested it.

  • Hot ideas
  • Top ideas
  • New ideas
  1. Debug Lambda expressions [Planned]

    Allow Quick Watch and other Debug functions to work with Lambda expressions.

    "Expression cannot contain lambda expressions" makes this powerful language feature second-class within the IDE.

    Especially for data intensive applications being able to write Lambda expressions in the Quick Watch, Watch, Immediate Windows and debug evaluation is a must have.

    9,161 votes
    Vote
    Sign in
    Check!
    (thinking…)
    Reset
    or sign in with
    • facebook
    • google
      Password icon
      I agree to the terms of service
      Signed in as (Sign out)
      You have left! (?) (thinking…)
      82 comments  ·  Languages - C#  ·  Flag idea as inappropriate…  ·  Admin →

      TL; DR – We’re working on it and we’re super excited about it.

      Hey all,

      Just shooting you all an update on this since I can see some of you are wondering if we forgot about this issue. Unfortunately, with UserVoice we can only mark a suggestion as “Under Review”, “Declined”, or “Complete”; there’s no “Planned” or “In Progress” state which is why this suggestion is still marked “Under Review” even though we’ve been working on enabling this for a while.

      So here’s where we stand.
      1) We want this to work as much as you do. It’s not under review – it’s in progress.
      2) We figured out how to make it work; it simply requires rewriting everything.
      3) We’re rewriting everything.
      4) Rewriting everything takes a lot of time and a lot of testing.

      You see, the Immediate and Watch windows are powered by this thing called…

    • Add non-nullable reference types in C#

      Non-nullability checks have to be manually encoded hundreds of times in any large real-world project, and they are not compile-time-enforced. There are code contracts in .Net 4.0, but their usage is still very verbose, and only partly compile-time-enforced.

      What I wish is a pendant to the null-lifting operator ?, for instance, !, so that one could write:
      void MyMethod(string! s){ /* s cannot be null :) */}

      Or, the way ReSharper does it:
      void MyMethod([NotNull] string s){ /* s cannot be null :) */}

      1,577 votes
      Vote
      Sign in
      Check!
      (thinking…)
      Reset
      or sign in with
      • facebook
      • google
        Password icon
        I agree to the terms of service
        Signed in as (Sign out)
        You have left! (?) (thinking…)
        47 comments  ·  Languages - C#  ·  Flag idea as inappropriate…  ·  Admin →
      • Expand Generic Constraints for constructors

        Currently when declaring a generic constraint on a Type parameter
        ie.
        public void DoSomething<T>() where T : new() { /* do something */ }

        You can't specify that T has a constructor with specific parameters:
        ie.
        public void DoSomething<T>() where T : new(string, int) { /* do something */ }

        1,193 votes
        Vote
        Sign in
        Check!
        (thinking…)
        Reset
        or sign in with
        • facebook
        • google
          Password icon
          I agree to the terms of service
          Signed in as (Sign out)
          You have left! (?) (thinking…)
          16 comments  ·  Languages - C#  ·  Flag idea as inappropriate…  ·  Admin →
        • Update standalone FxCop to support .NET 4.5 and Portable Libraries

          Please update the standalone version of FxCop to be on par with the latest edition of the Code Analysis in VS 2012 to support developers using the Professional Edition SKU. This implies support for .NET 4.5 and for Portable Libraries.

          1,172 votes
          Vote
          Sign in
          Check!
          (thinking…)
          Reset
          or sign in with
          • facebook
          • google
            Password icon
            I agree to the terms of service
            Signed in as (Sign out)
            You have left! (?) (thinking…)
            48 comments  ·  Languages - C#  ·  Flag idea as inappropriate…  ·  Admin →
          • Greatly increase support for GPU programming in C#

            -Support GPU programming in C# -both general and graphical- on at least equal level with C++. On every Microsoft platform.
            -Design the future versions (or successor) of DirectX with C# in mind.

            1,040 votes
            Vote
            Sign in
            Check!
            (thinking…)
            Reset
            or sign in with
            • facebook
            • google
              Password icon
              I agree to the terms of service
              Signed in as (Sign out)
              You have left! (?) (thinking…)
              17 comments  ·  Languages - C#  ·  Flag idea as inappropriate…  ·  Admin →
            • INotifyPropertyChanged

              Provide a way for INotifyPropertyChanged to be implemented for you automatically on class.

              Provide a way for INPC to be done on auto properties (that you mark in some way)....so that you don't have to unroll the auto property into a field, and raise yourself.

              852 votes
              Vote
              Sign in
              Check!
              (thinking…)
              Reset
              or sign in with
              • facebook
              • google
                Password icon
                I agree to the terms of service
                Signed in as (Sign out)
                You have left! (?) (thinking…)
                16 comments  ·  Languages - C#  ·  Flag idea as inappropriate…  ·  Admin →
              • Improve code analysis

                Improve code analysis
                - Detect when first line of if block and else block are identical (same for last line)
                - Detect methods used only one time - Method is a candidate for in-lining
                - Detect constant defined in class used only one time
                - Detect private property with backing variable having get { return backingVariable; } set {backingVariable=value;} - convert to autoproperty
                - Detect public property used only within the same class - make it protected/private
                - Detect public method used only within the same class - make it protected/private
                - Detect class used only by one other class…

                843 votes
                Vote
                Sign in
                Check!
                (thinking…)
                Reset
                or sign in with
                • facebook
                • google
                  Password icon
                  I agree to the terms of service
                  Signed in as (Sign out)
                  You have left! (?) (thinking…)
                  11 comments  ·  Languages - C#  ·  Flag idea as inappropriate…  ·  Admin →
                • String interpolations in C#

                  Enable string interpolations in C#.

                  The interpolation should happen during compile time, so there are no performance penalties paid during runtime.

                  The Boo implemenation is a good place to start:
                  http://boo.codehaus.org/String+Interpolation

                  These should work:

                  var a = "Now is $(DateTime.Now)."
                  var b = "Tomorrow will be $(DateTime.Now.AddDays(1))"
                  var c = "This list has $(list.Count()) items."

                  751 votes
                  Vote
                  Sign in
                  Check!
                  (thinking…)
                  Reset
                  or sign in with
                  • facebook
                  • google
                    Password icon
                    I agree to the terms of service
                    Signed in as (Sign out)
                    You have left! (?) (thinking…)
                    43 comments  ·  Languages - C#  ·  Flag idea as inappropriate…  ·  Admin →
                  • Allow Extension Properties

                    I would like to be able to write extension Properties, not only extension methods.

                    545 votes
                    Vote
                    Sign in
                    Check!
                    (thinking…)
                    Reset
                    or sign in with
                    • facebook
                    • google
                      Password icon
                      I agree to the terms of service
                      Signed in as (Sign out)
                      You have left! (?) (thinking…)
                      6 comments  ·  Languages - C#  ·  Flag idea as inappropriate…  ·  Admin →
                    • Enable HLSL, DirectX and graphics development toolset for the C# language.

                      Visual Studio only provides hlsl compilation tools for C++ projects, while C# projects which also use hlsl are left without this facility. This is a glaring inconsistency in the tools provided to each language. C# is meant to be a first-class language yet the DirectX tools which are built in to Visual Studio are not equally provided to C#, this is an unnecessary and arbitrary limitation.

                      Developing DirectX applications with C# is becoming easier and there are now more tools than ever to work with this combination of technologies, including SlimDX and SharpDX, both fully capable managed DirectX frameworks (wrappers).…

                      513 votes
                      Vote
                      Sign in
                      Check!
                      (thinking…)
                      Reset
                      or sign in with
                      • facebook
                      • google
                        Password icon
                        I agree to the terms of service
                        Signed in as (Sign out)
                        You have left! (?) (thinking…)
                        5 comments  ·  Languages - C#  ·  Flag idea as inappropriate…  ·  Admin →
                      • C# support static extension methods like f#

                        C# support static extension methods like f#

                        497 votes
                        Vote
                        Sign in
                        Check!
                        (thinking…)
                        Reset
                        or sign in with
                        • facebook
                        • google
                          Password icon
                          I agree to the terms of service
                          Signed in as (Sign out)
                          You have left! (?) (thinking…)
                          10 comments  ·  Languages - C#  ·  Flag idea as inappropriate…  ·  Admin →
                        • Basic Refactoring Functionality needed

                          Right now when I want to make a section of code a method or make some simple refactoring, its not in the box. Rename is there, but its local to the page and doesn't go deep enough. The top 5-10 refactoring types should come in the box.

                          Merged from another idea: Improve the refactoring tools like code generation, rename, etc.

                          491 votes
                          Vote
                          Sign in
                          Check!
                          (thinking…)
                          Reset
                          or sign in with
                          • facebook
                          • google
                            Password icon
                            I agree to the terms of service
                            Signed in as (Sign out)
                            You have left! (?) (thinking…)
                            14 comments  ·  Languages - C#  ·  Flag idea as inappropriate…  ·  Admin →
                          • C# REPL - execute one-off C# code on the fly from within VS

                            I'd like to see a full read/eval/print loop for C# built into Visual Studio - much like F# Interactive, or Ruby's "irb".

                            When debugging, this would let you interact with the current state of the debugged application - like the Immediate Window does now, but more powerful (e.g. with support for lambdas).

                            When in design/editing mode, this would work a lot like LinqPad, but integrated into the IDE. It would let you evaluate expressions and execute multi-statement code blocks. This would let developers interactively experiment with their application classes ,.NET framework classes, and third-party APIs while writing code in Visual…

                            414 votes
                            Vote
                            Sign in
                            Check!
                            (thinking…)
                            Reset
                            or sign in with
                            • facebook
                            • google
                              Password icon
                              I agree to the terms of service
                              Signed in as (Sign out)
                              You have left! (?) (thinking…)
                              under review  ·  3 comments  ·  Languages - C#  ·  Flag idea as inappropriate…  ·  Admin →
                            • allow extension methods to be defined in instance classes

                              Currently, extension methods can only be defined in a static class. It would be very helpful if an extension method could also be defined in an instance class, so that this was possible:

                              public class Foo
                              {
                              public void DoBar()
                              {
                              new Qux().GetBaz("corge").DoGrault();
                              }

                              private static Baz GetBaz(this IQux qux, string s)
                              {
                              // Get Baz from qux here...
                              }
                              }

                              This simply enables a more fluent syntax for private helper methods. This can improve readability of the code compared to a more procedural-looking use of normal static helper methods.

                              The current workaround is to define a new internal static…

                              387 votes
                              Vote
                              Sign in
                              Check!
                              (thinking…)
                              Reset
                              or sign in with
                              • facebook
                              • google
                                Password icon
                                I agree to the terms of service
                                Signed in as (Sign out)
                                You have left! (?) (thinking…)
                                7 comments  ·  Languages - C#  ·  Flag idea as inappropriate…  ·  Admin →
                              • Bring back incremental C# compilation

                                When coding Java in Eclipse, the compiler incrementally compiles the project in the background every time a file is saved. This way, when the user clicks run, the launch is instantaneous, rather than the long build process that comes with C#. This makes it easier to develop and test small changes, which in turn makes it easier to find and fix bugs.

                                The C# compiler originally had this functionality, but it was removed when .NET 2.0 arrived as it could sometimes cause problems. However, given that it been proved possible in an equivalent language by the Eclipse team, coupled with…

                                340 votes
                                Vote
                                Sign in
                                Check!
                                (thinking…)
                                Reset
                                or sign in with
                                • facebook
                                • google
                                  Password icon
                                  I agree to the terms of service
                                  Signed in as (Sign out)
                                  You have left! (?) (thinking…)
                                  9 comments  ·  Languages - C#  ·  Flag idea as inappropriate…  ·  Admin →
                                • XML comments schema customization in C#

                                  Allow to customize the XML tags recommended for use in XML inline comments for documentation.

                                  Just as in VB, a CSharpXMLDoc.xml could be saved in AppData to pass C# editor the customized XML elements.

                                  292 votes
                                  Vote
                                  Sign in
                                  Check!
                                  (thinking…)
                                  Reset
                                  or sign in with
                                  • facebook
                                  • google
                                    Password icon
                                    I agree to the terms of service
                                    Signed in as (Sign out)
                                    You have left! (?) (thinking…)
                                    13 comments  ·  Languages - C#  ·  Flag idea as inappropriate…  ·  Admin →
                                  • Compliable strings

                                    If you're writing a tracing and logging component you may well want to pass the current method name to your logging component. Rather than hard code it (then forget to change it when you change the method name) you can use reflection and the MethodBase class to retrieve the name:
                                    System.Reflection.MethodBase currentMethod = System.Reflection.MethodBase.GetCurrentMethod();
                                    System.Diagnostics.Debug.WriteLine(currentMethod.Name);
                                    System.Diagnostics.Debug.WriteLine(currentMethod.DeclaringType.Name);
                                    System.Diagnostics.Debug.WriteLine(currentMethod.DeclaringType.Namespace);

                                    In C # 4.5 you can use attributes System.Runtime.CompilerServices.CallerMemberNameAttribute, System.Runtime.CompilerServices.CallerFilePathAttribute and System.Runtime.CompilerServices.CallerLineNumberAttribute for such purposes.

                                    Frequent use of reflection dramatically reduces performance. Using special attributes is a contentious issue. Because attributes inherently are declarative. They obviously do not provide full support for the…

                                    271 votes
                                    Vote
                                    Sign in
                                    Check!
                                    (thinking…)
                                    Reset
                                    or sign in with
                                    • facebook
                                    • google
                                      Password icon
                                      I agree to the terms of service
                                      Signed in as (Sign out)
                                      You have left! (?) (thinking…)
                                      7 comments  ·  Languages - C#  ·  Flag idea as inappropriate…  ·  Admin →
                                    • Unmanaged generic type constraint + generic pointers

                                      Add an "unmanaged"/"blittable" generic type constraint and use it to allow generic pointers and related features. Related post by Eric Lippert:
                                      http://stackoverflow.com/questions/7551461/c-sharp-generic-constraint-where-is-not-class/7557040#7557040

                                      The end result would allow this sort of code:

                                      unsafe void DoSomeStuff<T>() where T : unmanaged
                                      {
                                      T t = new T();
                                      T* tPointer = &t;
                                      T* aBunchOfT = stackalloc T[100];
                                      var tSize = sizeof(T);
                                      byte* aBunchOfBytes = stackalloc byte[tSize * 100];
                                      T* aBunchOfCastedT = (T*)bunchOfBytes;
                                      }

                                      Performance critical generic data structures, particularly those using preallocated pools of memory, would be a good example use case for this.

                                      Currently, a data structure using pointers to represent data would…

                                      244 votes
                                      Vote
                                      Sign in
                                      Check!
                                      (thinking…)
                                      Reset
                                      or sign in with
                                      • facebook
                                      • google
                                        Password icon
                                        I agree to the terms of service
                                        Signed in as (Sign out)
                                        You have left! (?) (thinking…)
                                        2 comments  ·  Languages - C#  ·  Flag idea as inappropriate…  ·  Admin →
                                      • Add support for ISupportInitialize on object initializers

                                        Quite often, it's necessary to validate an object state when it's initialized. With constructor arguments, this is easy to do as it can be done at the end or begining of ctor code. With object initializers, it's nearly impossible, as there's no way to know programatically when the object initialization is finished.

                                        There's a built-in mechamis for this that is being used in WinForms and WPF: the ISupportInitialize interface. The initialization code generated by both toolkits checks to determine if the object implements the interface. If it does, it will call BeginInit() before invoking all property setters, and EndInit() at…

                                        239 votes
                                        Vote
                                        Sign in
                                        Check!
                                        (thinking…)
                                        Reset
                                        or sign in with
                                        • facebook
                                        • google
                                          Password icon
                                          I agree to the terms of service
                                          Signed in as (Sign out)
                                          You have left! (?) (thinking…)
                                          5 comments  ·  Languages - C#  ·  Flag idea as inappropriate…  ·  Admin →
                                        • Structure All Nullable Values

                                          .NET Framework already has Nullable<T> but it could also have ToNullable<T> as a struct.

                                          If you wanted to keep reference-types null and turn value-types to null you could make this:

                                          class someGenericClass<T>
                                          {
                                          T? value; /* = Nullable<T> value; but this gives error
                                          because T may already be null */

                                          T$ value; /* = ToNullable<T> value; this doesn't give error,
                                          what you wnat is keep what's null null,
                                          and turn non-null into null */
                                          }

                                          The only problem is that this does not exist!
                                          If you don't understand anything about this, contact jmcf125@gmail.com.

                                          239 votes
                                          Vote
                                          Sign in
                                          Check!
                                          (thinking…)
                                          Reset
                                          or sign in with
                                          • facebook
                                          • google
                                            Password icon
                                            I agree to the terms of service
                                            Signed in as (Sign out)
                                            You have left! (?) (thinking…)
                                            14 comments  ·  Languages - C#  ·  Flag idea as inappropriate…  ·  Admin →
                                          ← Previous 1 3 4 5 30 31
                                          • Don't see your idea?

                                          Feedback and Knowledge Base