Visual Studio IDE

Announcement: This forum has been migrated to provide our customers one convenient and responsive system for all feedback. You can now suggest new ideas, browse and vote on existing ideas in the Visual Studio Developer Community. To learn more about the migration to Visual Studio Developer Community please check out the release blog post.

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. make dedicated C# syntax for IEnumerable<T> type definitions

    Just like Nullable<int> can be written as int? I would like to be able to write int* in stead of IEnumerable<int>. This would of course also work for reference types like a custom defined Person class. IEnumerable<Person> would then be equivalent to Person*.

    IEnumerable<T> has become a very important type within the .NET framework and in my opinion it would make sense to include some minor syntax in the C# language to avoid to have to write the types rather long name for example when defining method parameters and return values that are enumerable. The 'var' keyword isn't allowed everywhere…

    119 votes
    Vote
    Sign in
    Check!
    (thinking…)
    Reset
    or sign in with
    • facebook
    • google
      Password icon
      Signed in as (Sign out)
      You have left! (?) (thinking…)
      11 comments  ·  Languages - C#  ·  Flag idea as inappropriate…  ·  Admin →
    • C# falls to #8 most popular language in 2018 Stack Overflow survey

      This suggestion is migrated to Developer Community. Please use below link to view the current status.
      https://developercommunity.visualstudio.com/content/idea/351630/c-falls-to-8-most-popular-language-in-2018-stack-o.html
      C# has fallen from #4 in the 2017 survey to #8 in the 2018 Stack Overflow survey

      118 votes
      Vote
      Sign in
      Check!
      (thinking…)
      Reset
      or sign in with
      • facebook
      • google
        Password icon
        Signed in as (Sign out)
        You have left! (?) (thinking…)
        14 comments  ·  Languages - C#  ·  Flag idea as inappropriate…  ·  Admin →
      • Intellisense in XML Documentation For <exception>, <see> and <seealso>

        I'm often adding <see cref="Type"> or <see cref="Type.Member"/> elements to the /// comments in C# code. When writing them, I have to type (or copy-paste) the full name of the type/member I'm referencing.

        There should be Intellisense similar to when writing actual code available when using the <exception>, <see> and <seealso> tags.

        113 votes
        Vote
        Sign in
        Check!
        (thinking…)
        Reset
        or sign in with
        • facebook
        • google
          Password icon
          Signed in as (Sign out)
          You have left! (?) (thinking…)
          8 comments  ·  Languages - C#  ·  Flag idea as inappropriate…  ·  Admin →
        • Don't create asterisk for new lines within block comments in C#

          In languages like C and C# you can create block comments like this /* ... */. When you press enter within one of these VS thinks it is being helpful by adding an extra space and asterisk like this:

          /*
          *
          *
          */

          This is really anoying! Every time I press return I then have to press backspace twice as well!

          I am aware that this can be turned off unchecking the "Generate XML documentation comments for ///" option, but there are two things wrong with that: First I do want to create XML documentation and second the wording of…

          111 votes
          Vote
          Sign in
          Check!
          (thinking…)
          Reset
          or sign in with
          • facebook
          • google
            Password icon
            Signed in as (Sign out)
            You have left! (?) (thinking…)
            11 comments  ·  Languages - C#  ·  Flag idea as inappropriate…  ·  Admin →
          • Implement replace/original, code generator feature for C#

            This suggestion is migrated to Developer Community. Please use below link to view the current status.
            https://developercommunity.visualstudio.com/content/idea/351504/implement-replaceoriginal-code-generator-feature-f.html
            As championed here, https://github.com/dotnet/csharplang/issues/107, the replace/original feature will allow custom code generators to be added to C# to implement many common boilerplate tasks. Also known as "Aspect Oriented Programming".

            Possible use cases include implementing INotifyPropertyChanged, logging, exception handling, retrying, and many others.

            110 votes
            Vote
            Sign in
            Check!
            (thinking…)
            Reset
            or sign in with
            • facebook
            • google
              Password icon
              Signed in as (Sign out)
              You have left! (?) (thinking…)
              3 comments  ·  Languages - C#  ·  Flag idea as inappropriate…  ·  Admin →
            • String Enum for both C# and VB

              The underlying type for an Enum is integer based; but I was wondering if it were possible to have a Enum that were String based. Not sure if it's even possible make sense; but it would save some time creating wrapper classes for String constants.

              106 votes
              Vote
              Sign in
              Check!
              (thinking…)
              Reset
              or sign in with
              • facebook
              • google
                Password icon
                Signed in as (Sign out)
                You have left! (?) (thinking…)
                7 comments  ·  Languages - C#  ·  Flag idea as inappropriate…  ·  Admin →
              • File Scoped Namespaces

                Background

                .NET style guidelines recommend having at most one namespace per file. The current namespace syntax only allows block scope, resulting in every file typically having all of its contents (save using statements) wrapped in a namespace block. This leads to both vertical space being wasted (the curly braces used to delimit the block) and more importantly, horizontal space being wasted, with all of the important content indented by an extra tab (if style guidelines are being followed). The indentation from the namespace block conveys no useful information- it is just code bloat.

                Proposal

                Allow a single namespace declaration per…

                104 votes
                Vote
                Sign in
                Check!
                (thinking…)
                Reset
                or sign in with
                • facebook
                • google
                  Password icon
                  Signed in as (Sign out)
                  You have left! (?) (thinking…)
                  3 comments  ·  Languages - C#  ·  Flag idea as inappropriate…  ·  Admin →
                • Support Object Initializers on ExpandoObjects

                  The following really seems like a feature that should work, but it gives a compiler error:

                  dynamic expando = new ExpandoObject {
                  FirstName = "David",
                  LastName = "Lee"
                  };

                  It makes sense for Object Initializers to work on all types that implement IDynamicMetaObjectProvider. This inline initialization is especially useful when you want to pass the object inline as a parameter.

                  For example:

                  RegisterOptions(
                  first: new ExpandoObject { FirstName = "A", LastName = "B" },
                  second: new ExpandoObject { FirstName = "C", LastName = "D" },
                  third: new ExpandoObject { FirstName = "E", LastName = "F" }
                  };

                  Instead of:

                  dynamic…

                  100 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 →
                  • Add virtual extension methods (default interface implementations, default methods, traits) to C#

                    C# has extension methods, which allow one to define a method that is syntactically invoked on an instance, but defined as a static method on another type. However, these methods lack one very important feature of normal methods: they cannot be overridden by specific implementations.

                    Java 8 in contrast introduced an alternative concept, called virtual extension methods, which could be beneficial for C# as well. Virtual extension methods are defined as interface methods with default implementations:

                    public interface IMyInterface
                    {
                    string Property { get; } // ordinary interface member

                    default string Format()
                    {
                    return string.Format ("{0} ({1})", GetType().Name, Property);
                    } …

                    100 votes
                    Vote
                    Sign in
                    Check!
                    (thinking…)
                    Reset
                    or sign in with
                    • facebook
                    • google
                      Password icon
                      Signed in as (Sign out)
                      You have left! (?) (thinking…)
                      4 comments  ·  Languages - C#  ·  Flag idea as inappropriate…  ·  Admin →
                    • Add a "??=" operator to C#

                      Add an operator that assigns the value of the right operand to the left operand when the left operand is null. For example:

                      string message = null;
                      message ??= "Hello, World!"; // sets 'message' to "Hello, World!" since 'message' was null.
                      message ??= "Goodbye, World!"; // leaves 'message' set to "Hello, World!" since 'message was not null.

                      The example above uses strings but would apply to any reference/nullable type.

                      Currently, the best alternative that we have for this in C# is:
                      message = message ?? "Hello, World!";

                      Thanks,
                      Blake

                      95 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 →
                      • Add VB's high-level event system to C#

                        VB's high-level event system is one of the main advantages of VB over C#. I would like to have it in C# as well.
                        This event syntax is as awesome and useful as the highly praised async/await in VB and C#, where a lot of complicated work is left to the compiler.
                        It puts the language on a higher abstraction level making it less error-prone, better readable, better maintainable and faster to write.
                        However, it does not work with lambda event handlers.

                        The current C# way of making events is not much more than a pattern which has to be…

                        95 votes
                        Vote
                        Sign in
                        Check!
                        (thinking…)
                        Reset
                        or sign in with
                        • facebook
                        • google
                          Password icon
                          Signed in as (Sign out)
                          You have left! (?) (thinking…)
                          4 comments  ·  Languages - C#  ·  Flag idea as inappropriate…  ·  Admin →
                        • Intellisense filter by type

                          This suggestion is migrated to Developer Community. Please use below link to view the current status.
                          https://developercommunity.visualstudio.com/content/idea/351024/intellisense-filter-by-type.html
                          Sometimes, when I'm coding, I need to search in the intellisense's dropdown for certain kinds of elements.

                          That is, when I need to add an event handler and I don't recall its name, I have to search through all elements (methods, properties, enums, etc) til I find mine.

                          If I could filter the list by "events", it could optimize the search. Same when I'm looking for "methods", "properties" and etc.

                          What about adding tabs on top or below the list, so we can…

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

                            Thanks for sharing this suggestion.
                            I’m pleased to report that this feature is being built for Visual Studio “15″.

                            You can try it in the recently published Visual Studio “15″ Preview 4
                            (see https://blogs.msdn.microsoft.com/visualstudio/2016/08/22/visual-studio-15-preview-4/ for download details)

                            To enable this feature in Visual Studio “15″ Preview 4, go to Tools > Options > Text Editor > [C# | Visual Basic] > IntelliSense and check the options for highlighting and filtering.

                            See Kasey Uhlenthuth’s blog post at https://blogs.msdn.microsoft.com/dotnet/2016/07/13/visual-studio-15-preview-3-for-c-and-visual-basic/ under “Intellisense Improvements” for more details.

                            Thanks
                            - The Visual Studio Team

                          • Add "using static" inside method body.

                            C# 6 has a new future that you can use static members of class or enumeration members without providing the class or enumeration name explicitly.

                            using static System.Reflection.BindingFlags;
                            ...
                            var m = type.GetMethod("A", Instance|Public);

                            But the the "using static" is global inside a file. My suggestion is to limit it inside the method body:

                            public MethodInfo GetMethod()
                            {
                            using static System.Reflection.BindingFlags;
                            return type.GetMethod("A", Instance|Public);
                            }

                            This could simplifies a method without having you to use a static class/enum on the while file.

                            82 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 →
                            • Extract Interface Refactoring that extract methods to existing Interface

                              The Extract Interface Refactoring are always extract methods to a new interface file which sometimes we already have Interface file established. I think it'll be better if the Extract Interface Refactoring could extract new methods into current interface definition.

                              79 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 →
                              • Read all git history of a file

                                Read all git history even if you move one file to another directory.

                                I can use git log --full-history filename to read all the history of the file in the console but I can´t use it with codelens

                                72 votes
                                Vote
                                Sign in
                                Check!
                                (thinking…)
                                Reset
                                or sign in with
                                • facebook
                                • google
                                  Password icon
                                  Signed in as (Sign out)
                                  You have left! (?) (thinking…)
                                  4 comments  ·  Languages - C#  ·  Flag idea as inappropriate…  ·  Admin →
                                • Add VB's procedure line separators to the code editors of all other languages.

                                  In the VB editor there is a horizontal line drawn between all procedures. This makes the code better readable while scrolling, at least to visually oriented people like me.
                                  This nice feature is missing in the editors of languages other than VB.

                                  70 votes
                                  Vote
                                  Sign in
                                  Check!
                                  (thinking…)
                                  Reset
                                  or sign in with
                                  • facebook
                                  • google
                                    Password icon
                                    Signed in as (Sign out)
                                    You have left! (?) (thinking…)
                                    5 comments  ·  Languages - C#  ·  Flag idea as inappropriate…  ·  Admin →
                                  • Empty braces are no longer formatted correctly with the FormatDocument command

                                    See also here: http://stackoverflow.com/questions/30520764/did-c-sharp-formatting-change-in-visual-studio-2015-and-how-can-i-change-it-bac

                                    Given an empty method like this:

                                    void EmptyMethod() { }

                                    FormatDocument (Ctrl-K, Ctrl-D) used to leave it alone. In VS 2015, FormatDocument now moves the braces to their own line:

                                    void EmptyMethod()
                                    { }

                                    This is annoying because (a) when I use CollapseToDefinitions, I can no longer see (without expanding it) that the method is empty, and (b) there's no apparent way to turn this behavior off.

                                    Can it be changed back to how it used to be, where FormatDocument would leave these braces alone?

                                    70 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 →
                                    • Allow SuppressMessageAttribute to work types within a namespace

                                      Right now the SuppressMessageAttribute only suppresses diagnostics against a namespace, but not the types within it.
                                      So this:
                                      [assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Style", "CC0061", Scope = "namespace", Target = "CodeCracker.Test.Design", Justification = "No need for tests to have async sufix.")]

                                      Would not work against types inside the "CodeCracker.Test.Design" namespace, but only if the diagnostic was on the namespace itself.
                                      To be able to do that, we need to add a SuppressMessageAttribute to each type individually, what is error prone, ugly and demands a lot of attention.
                                      There needs to be a way to allow for the suppression of diagnostics agains all types within…

                                      68 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 →
                                      • Do not indent #region with code

                                        In C# the #region's follow the code in indentation. I think this is wrong, as they are not a part of the code, and should stay aside - just like they do it in Visual Basic.
                                        I find the C# #region's too obtrusive. Please, change the behaviour, so they are left-aligned in the editor window, both when folded and unfolded.

                                        65 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 →
                                        • Add QuickAction to refactor var to implicit type

                                          I regularly type var as a time saver but would prefer the strong type itself to be in code.
                                          So I type:
                                          var result = SomeMethod();
                                          I would like to do a quick action on var to convert it to:
                                          List<SomeType> result = SomeMethod();

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

                                          Feedback and Knowledge Base