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

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

    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.

    8,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…)
      under review  ·  52 comments  ·  Languages - C#  ·  Flag idea as inappropriate…  ·  Admin →
    • Add "?." operator to C#

      Add the "?." operator to C# and make it chainable like CoffeeScript so we don't have to write null reference checks for every nested property. An example would be:
      myObject?.Items?.[0]?.DoSomething()

      4,840 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…)
        197 comments  ·  Languages - C#  ·  Flag idea as inappropriate…  ·  Admin →

        We are seriously considering this feature for C# and VB, and will be prototyping it in coming months. Syntax in C# would be

        e?.x // member access
        e?.M(…) // method invocation
        e?[…] // indexing

        Semantically this will be similar to

        (e == null) ? null : e.x

        etc., except that e will only be evaluated once of course.

        If the type of e.x (etc) is a non-nullable value type S, then the type of e?.x is S?. Otherwise the type of e?.x is the same as that of e.×. If we can’t tell whether the type is a non-nullable value type (because it is a type parameter without sufficient constraints) we’ll probably give a compile-time error.

        Thanks for all the great comments!

        Mads Torgersen
        C# Language PM

      • I wish catch multiple exceptions in the same catch

        For example:

        try
        {
        // smth}
        catch (RemoteException, NamingException , CreateException e)
        {
        // smth
        }

        1,489 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…)
          53 comments  ·  Languages - C#  ·  Flag idea as inappropriate…  ·  Admin →
        • 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,274 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…)
            46 comments  ·  Languages - C#  ·  Flag idea as inappropriate…  ·  Admin →
          • Allow "default" values on automatic properties

            When using auto-properties, I should be able to set a default value without having to create a constructor, like I can with a field:

            Something like:
            public bool IsActive = true { get; private set; }

            1,253 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…)
              66 comments  ·  Languages - C#  ·  Flag idea as inappropriate…  ·  Admin →

              It is our plan to add this feature to C#.

              The syntactic form of it will be to put an initializer at the end of the auto-property declaration, just like for field initializers:

              public int X { get; set; } = x;

              The initializer directly initializes the underlying field – it doesn’t go through the setter. For that reason, it is now meaningful to allow getter-only auto-properties:

              public int Y { get; } = y;

              For getter-only auto-properties, we would generated the backing field as readonly.

              Thanks for all the great comments and suggestions! We looked at the feedback in our design discussions, and ended up deciding that this was the best approach all up.

              Mads Torgersen, C# Language PM

            • 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,078 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.

                911 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…)
                  15 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 */ }

                  732 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 →
                  • 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…

                    682 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."

                      644 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…)
                        39 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.

                        527 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 →
                        • 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.

                          481 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 →
                          • 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).…

                            471 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…)
                              4 comments  ·  Languages - C#  ·  Flag idea as inappropriate…  ·  Admin →
                            • C# support static extension methods like f#

                              C# support static extension methods like f#

                              408 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 →
                              • 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…

                                391 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…

                                  350 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 →
                                  • 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…

                                    306 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…)
                                      8 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.

                                      261 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 →
                                      • 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…

                                        240 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 26 27
                                          • Don't see your idea?

                                          Feedback and Knowledge Base