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: https://connect.microsoft.com/visualstudio.

To review the current UserVoice statuses and their definitions, please review our “What Does the Status of My Feedback Mean?” article.

We would also like to invite you to check out the Announcements section we have added to this site, where we will be posting special opportunities for you to participate in.

We look forward to hearing from you!

The 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 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. 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 :) */}

    2,159 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…)
      58 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,854 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…)
        20 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.

        1,435 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 →
        • 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,304 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…)
            58 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,265 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…)
              20 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…

              899 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…)
                12 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."

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

                  C# support static extension methods like f#

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

                    548 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# 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…

                      500 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  ·  6 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.

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

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

                            393 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.

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

                                291 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 →
                                • Return Multiple values from functions effortlessly without creating new classes for everything

                                  When you think of it, its silly that methods by default can only return one value, but can take many arguments. Often times you want many return values, but it would be too painful to create classes/structs for each set, so often developers decide to then use ref or out parameters.

                                  Instead what if method/function calls could return many values without the need to define a class/struct.
                                  This example is a bit contrived but this shows the power of the fact that error information and values can easily be returned al at once.

                                  Syntaxt like:

                                  private {int index, bool IsError=false,…

                                  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…)
                                    50 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…

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

                                      247 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 →
                                      • Add IntelliSense support for the <inheritdoc /> tag in XML documentation comments

                                        We currently use the <inheritdoc /> and <inheritdoc cref="" /> tags extensively in our code base in order to reduce the amount of duplicated documentation that needs to be written.

                                        This works great for the most part, since we generate our docs using Sandcastle.

                                        However, when we are actually developing code in the same c# project as the API which uses <inheritdoc>, Visual Studio does not recognize the tag, or resolve any references.

                                        It would be great if Visual Studio Intellisense could actually do this.

                                        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…)
                                          7 comments  ·  Languages - C#  ·  Flag idea as inappropriate…  ·  Admin →
                                        • Let lambdas with a statement body be converted to an expression tree

                                          The C# compiler supports translating a lambda expression to an expression tree (System.Linq.Expressions).

                                          Today lambdas with no statement body (only a single statement) are supported just fine.

                                          Expression<Action> x = () => Console.WriteLine("Hello World");

                                          But lambdas with a statement body (braces), which is needed to have multiple statements, doesn't compile.

                                          Expression<Action> y = () => { Console.WriteLine("Hello"); Console.WriteLine("World"); };

                                          I believe there is a lot of awesome stuff not being possible due to this lack of support.

                                          It seems very unproblematic to implement, but if there are any hidden issues with this feature, it would be nice to know so…

                                          241 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…)
                                            3 comments  ·  Languages - C#  ·  Flag idea as inappropriate…  ·  Admin →
                                          ← Previous 1 3 4 5 36 37
                                          • Don't see your idea?

                                          Feedback and Knowledge Base