Visual Studio IDE

We’d like your suggestions and ideas to help us continuously improve future releases of Visual Studio, so we’ve partnered with UserVoice, a third-party service, to collect your feedback. Please do not send any novel or patentable ideas, copyrighted materials, samples or demos for which you do not want to grant a license to Microsoft.

This site is for feature suggestions; if you need to file a bug, you can visit our Developer Community website to get started.

Note: your use of the portal and your submission is subject to the UserVoice Terms of Service & Privacy Policy and license terms.

We look forward to hearing from you!
- The 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 support and comment on it.

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

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

  • Hot ideas
  • Top ideas
  • New ideas
  • My feedback
  1. C# falls to #8 most popular language in 2018 Stack Overflow survey

    C# has fallen from #4 in the 2017 survey to #8 in the 2018 Stack Overflow survey

    77 votes
    Vote
    Sign in
    Check!
    (thinking…)
    Reset
    or sign in with
    • facebook
    • google
      Password icon
      Signed in as (Sign out)
      You have left! (?) (thinking…)
      10 comments  ·  Languages - C#  ·  Flag idea as inappropriate…  ·  Admin →
    • Dictionary get item lambda

      Dictionary<string, T> some = new Dictionary<string, T>();
      var tmp = some["some_key"]?.SomeField ?? string.Empty;

      15 votes
      Vote
      Sign in
      Check!
      (thinking…)
      Reset
      or sign in with
      • facebook
      • google
        Password icon
        Signed in as (Sign out)
        You have left! (?) (thinking…)
        0 comments  ·  Languages - C#  ·  Flag idea as inappropriate…  ·  Admin →
      • 3 votes
        Vote
        Sign in
        Check!
        (thinking…)
        Reset
        or sign in with
        • facebook
        • google
          Password icon
          Signed in as (Sign out)
          You have left! (?) (thinking…)
          1 comment  ·  Languages - C#  ·  Flag idea as inappropriate…  ·  Admin →
        • The ability to generate a class diagram from code in Visual Studio for Mac

          Like the feature for the VS2017 windows version where you can generate a class diagram from code, but then for the Mac version as well

          58 votes
          Vote
          Sign in
          Check!
          (thinking…)
          Reset
          or sign in with
          • facebook
          • google
            Password icon
            Signed in as (Sign out)
            You have left! (?) (thinking…)
            0 comments  ·  Languages - C#  ·  Flag idea as inappropriate…  ·  Admin →
          • Ranged Data Types In C#

            I suggest to improve current numeric types by adding a way to set a value range. This can be done by some attributes, but it will be easier to give it a syntax like this
            C#:
            [5,10]int i;
            VB.NET:
            Dim i As Integer[5,10]
            The compiler must not allow I to have any value < 5 or >10.
            One can omit one limit:
            [,100]byte
            [13,]int
            This will make it easy to write auto-properties like this:
            C#:
            [18,30]int Age {get; set;};
            VB.NET:
            Property Age As Integer[18,30]

            Another Syntax Suggestion:
            C#:
            <5,10>int i;
            VB.NET:
            Dim i As Integer<5,10>

            36 votes
            Vote
            Sign in
            Check!
            (thinking…)
            Reset
            or sign in with
            • facebook
            • google
              Password icon
              Signed in as (Sign out)
              You have left! (?) (thinking…)
              6 comments  ·  Languages - C#  ·  Flag idea as inappropriate…  ·  Admin →
            • Provide an option to disable the Quick Info popup

              Provide an option to disable the Quick Info popup.

              Whenever I hover over a type, variable, object or value, the Quick Info popup appears, hiding the very part of the code I'm trying to view/edit. I've been told by Elvin Zhao that "so far there is no option to disable the Quick Info option popup".

              This is very problematic for me, because I need able to see my code without the (literally) constant distractions of this behavior. I'm getting ready to find another editing environment. Please advise.

              4 votes
              Vote
              Sign in
              Check!
              (thinking…)
              Reset
              or sign in with
              • facebook
              • google
                Password icon
                Signed in as (Sign out)
                You have left! (?) (thinking…)
                0 comments  ·  Languages - C#  ·  Flag idea as inappropriate…  ·  Admin →
              • "throw return" pattern as alternative to "async-await"

                What I think would be a nice addition to C# would be recognize return as a special keyword of throw, so that you can completely unwind the stack upto the point where UI entered and return a value without raising an exception. This would allow a user to start an async task, add a few continuations to this task, then "throw return" back to the top of the stack to the UI...without using the async keyword at all. Example:
                void XYZ_Click(…) {
                if (DeeplyNestedFunction() == 1) {
                ...
                }
                else {
                ...
                }
                }

                int DeeplyNestedFunction() {
                if (...) { …

                0 votes
                Vote
                Sign in
                Check!
                (thinking…)
                Reset
                or sign in with
                • facebook
                • google
                  Password icon
                  Signed in as (Sign out)
                  You have left! (?) (thinking…)
                  2 comments  ·  Languages - C#  ·  Flag idea as inappropriate…  ·  Admin →
                • Expand the Things That Can Be Renamed

                  It would be lovely if I could rename (via ctrl+r, ctrl+r) dictionary accessor notation. My use case would be something like ViewState[ "someKey" ]. If I highlight that in it's entirety, it would be nice to be able to use the rename to change all instances to ViewState[ "someOtherKey" ]. It would have to require selection of the braces at the least to avoid mangling matching text in other strings.

                  3 votes
                  Vote
                  Sign in
                  Check!
                  (thinking…)
                  Reset
                  or sign in with
                  • facebook
                  • google
                    Password icon
                    Signed in as (Sign out)
                    You have left! (?) (thinking…)
                    0 comments  ·  Languages - C#  ·  Flag idea as inappropriate…  ·  Admin →
                  • Add unreachable code warning when comparing non-nullable type variables to null

                    The C# linter (or whatever it's called) should warn the programmer of an unreachable code if they try to compare a non-nullable type variable to null.

                    After all, it's a non-nullable type, which means that it can never reference to null, isn't that right?

                    Example:

                    if (new Point(0, 0) == null) MessageBox.Show("Hello World!");

                    1 vote
                    Vote
                    Sign in
                    Check!
                    (thinking…)
                    Reset
                    or sign in with
                    • facebook
                    • google
                      Password icon
                      Signed in as (Sign out)
                      You have left! (?) (thinking…)
                      0 comments  ·  Languages - C#  ·  Flag idea as inappropriate…  ·  Admin →
                    • Attribute based decorators

                      Python allows you to use an @mydecorator syntax (which is effectively an attribute that can be placed above a method).. This indicates when executing the decorated method should get wrapped it in an outer method. it makes AOP programming really easy. It also makes it explicit that the method or methods within a class have been decorated and with what. Decorators can also be chained by using multiple attributes.

                      In C# the wrapping would have to be performed at compile time rather than at execution time, but that would still be very very useful.

                      1 vote
                      Vote
                      Sign in
                      Check!
                      (thinking…)
                      Reset
                      or sign in with
                      • facebook
                      • google
                        Password icon
                        Signed in as (Sign out)
                        You have left! (?) (thinking…)
                        0 comments  ·  Languages - C#  ·  Flag idea as inappropriate…  ·  Admin →
                      • Shortcut for creating tasks

                        Map this:

                        static Task MethodAsync() {
                        Task A = new Task(() => {
                        Console.WriteLine("A:begin");
                        for (int i=0; i < 10000; i++) {
                        Console.WriteLine("A:{0}", i);
                        }
                        Console.WriteLine("A:end");
                        doneA = true;
                        });
                        A.Start();
                        return A;
                        }

                        Into this:

                        static TaskNew MethodAsync() {
                        Console.WriteLine("A:begin");
                        for (int i=0; i < 10000; i++) {
                        Console.WriteLine("A:{0}", i);
                        }
                        Console.WriteLine("A:end");
                        doneA = true;
                        }

                        0 votes
                        Vote
                        Sign in
                        Check!
                        (thinking…)
                        Reset
                        or sign in with
                        • facebook
                        • google
                          Password icon
                          Signed in as (Sign out)
                          You have left! (?) (thinking…)
                          2 comments  ·  Languages - C#  ·  Flag idea as inappropriate…  ·  Admin →
                        • It would be nice to be able to have arrays of strings in structs.

                          It would be nice to be able to have arrays of strings in structs.

                          1 vote
                          Vote
                          Sign in
                          Check!
                          (thinking…)
                          Reset
                          or sign in with
                          • facebook
                          • google
                            Password icon
                            Signed in as (Sign out)
                            You have left! (?) (thinking…)
                            0 comments  ·  Languages - C#  ·  Flag idea as inappropriate…  ·  Admin →
                          • eliminate the using clause

                            Instead of requiring using blocks, use the ~ operator in front of variable. Call dispose when the object goes out of scope.

                            ~DataContect myDB = ....
                            ~TextReader myfile = ...

                            1 vote
                            Vote
                            Sign in
                            Check!
                            (thinking…)
                            Reset
                            or sign in with
                            • facebook
                            • google
                              Password icon
                              Signed in as (Sign out)
                              You have left! (?) (thinking…)
                              0 comments  ·  Languages - C#  ·  Flag idea as inappropriate…  ·  Admin →
                            • null-conditional operator should initialize out var

                              aa?.bb(out var cc)

                              is a legal syntax, but you end up with a 'cc' that you cannot access since it can be uninitialized.

                              If null-conditional operator is used, I think there would be no harm if compiler initializes out var variables to the default value (null).

                              1 vote
                              Vote
                              Sign in
                              Check!
                              (thinking…)
                              Reset
                              or sign in with
                              • facebook
                              • google
                                Password icon
                                Signed in as (Sign out)
                                You have left! (?) (thinking…)
                                0 comments  ·  Languages - C#  ·  Flag idea as inappropriate…  ·  Admin →
                              • new namespace

                                namaspace vsualbasic

                                1 vote
                                Vote
                                Sign in
                                Check!
                                (thinking…)
                                Reset
                                or sign in with
                                • facebook
                                • google
                                  Password icon
                                  Signed in as (Sign out)
                                  You have left! (?) (thinking…)
                                  0 comments  ·  Languages - C#  ·  Flag idea as inappropriate…  ·  Admin →
                                • Make C# local functions stand out in the editor

                                  C# local functions is a nice feature that I like to use. But I find it difficult to visually identify such a function within a method. I would be nice to make them stand-out, using a different background, a border, or a left bar...

                                  2 votes
                                  Vote
                                  Sign in
                                  Check!
                                  (thinking…)
                                  Reset
                                  or sign in with
                                  • facebook
                                  • google
                                    Password icon
                                    Signed in as (Sign out)
                                    You have left! (?) (thinking…)
                                    0 comments  ·  Languages - C#  ·  Flag idea as inappropriate…  ·  Admin →
                                  • Please provide the ability to open a class by name

                                    Missing the ability to have a window with all classes and to open a class by name like eclipse has

                                    1 vote
                                    Vote
                                    Sign in
                                    Check!
                                    (thinking…)
                                    Reset
                                    or sign in with
                                    • facebook
                                    • google
                                      Password icon
                                      Signed in as (Sign out)
                                      You have left! (?) (thinking…)
                                      0 comments  ·  Languages - C#  ·  Flag idea as inappropriate…  ·  Admin →
                                    • Allow null-coalescing event chains in C# (var.someEvent += this.Event?.Invoke())

                                      Please add syntatic sugar to easily chain compatible events from a member or variable to invoke an event on the current class.

                                      Binding directly to the event works, but is not null safe.

                                      c.ChildEvent += ParentEvent.Invoke;

                                      Having a lambda expression works, but is unnecessarily verbose.

                                      c.ChildEvent += (sender, e) => ParentEvent?.Invoke(sender, e);

                                      A null-coalescing operator would be useful here, even if just syntactic sugar.

                                      c.ChildEvent += ParentEvent?.Invoke;

                                      https://dotnetfiddle.net/Zbx0wq

                                      using System;

                                      public class Parent
                                      {
                                      public event EventHandler ParentEvent;


                                      public void DoSomething() {
                                      var c = new Child();

                                      //Works, but not null-safe.
                                      c.ChildEvent += ParentEvent.Invoke;

                                      //Null safe, but verbose.
                                      c.ChildEvent +=…

                                      1 vote
                                      Vote
                                      Sign in
                                      Check!
                                      (thinking…)
                                      Reset
                                      or sign in with
                                      • facebook
                                      • google
                                        Password icon
                                        Signed in as (Sign out)
                                        You have left! (?) (thinking…)
                                        0 comments  ·  Languages - C#  ·  Flag idea as inappropriate…  ·  Admin →
                                      • Replicate the TSQL 'IN' Clause

                                        Instead of adding several Or clauses to an if statement that all check the value of the same variable, it would be great if you could write some syntax similar to the TSQL 'In' clause.

                                        So, instead of writing this:

                                        int test = 5;
                                        if (test == 6 || test == 17 || test == 82)
                                        {
                                        //code
                                        }

                                        You could write something like this:

                                        int test = 5;
                                        if (test in (6 || 17 || 82))
                                        {
                                        //code
                                        }

                                        https://docs.microsoft.com/en-us/sql/t-sql/language-elements/in-transact-sql?view=sql-server-2017

                                        1 vote
                                        Vote
                                        Sign in
                                        Check!
                                        (thinking…)
                                        Reset
                                        or sign in with
                                        • facebook
                                        • google
                                          Password icon
                                          Signed in as (Sign out)
                                          You have left! (?) (thinking…)
                                          0 comments  ·  Languages - C#  ·  Flag idea as inappropriate…  ·  Admin →
                                        • Don't make a coding standard default behaviour.

                                          I have a visual impairment that means I cannot see as clearly as other people and some parts of my vision are patchy. I would like a way to switch off the automatic variable names as this is causing me a lot of problems. Due to my eyesight I am not able to view the difference between lower case and upper case lettering. Visual Studio C# automatically 'corrects' my local variables to lowercase even after I have prefixed them with a letter L (L for local). I know this default behaviour is a coding standard that most people use but…

                                          1 vote
                                          Vote
                                          Sign in
                                          Check!
                                          (thinking…)
                                          Reset
                                          or sign in with
                                          • facebook
                                          • google
                                            Password icon
                                            Signed in as (Sign out)
                                            You have left! (?) (thinking…)
                                            0 comments  ·  Languages - C#  ·  Flag idea as inappropriate…  ·  Admin →
                                          ← Previous 1 3 4 5 44 45
                                          • Don't see your idea?

                                          Feedback and Knowledge Base