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
-
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.
5,340 votes -
C# and SIMD
It would be great if C# compiler and .Net JIT compiler could utilize SIMD instructions of current and future processors. The projects that require heavy calculations (MathDotNet.Numerics for example) would greatly benefit from this feature.
1,068 votes -
I wish catch multiple exceptions in the same catch
For example:
try
{
// smth}
catch (RemoteException, NamingException , CreateException e)
{
// smth
}1,008 votes -
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; }668 votes -
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.534 votes -
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 :) */}520 votes -
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 */ }483 votes -
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.
462 votes -
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+InterpolationThese 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."445 votes -
Get rid of #region
My informal analysis concludes that #regions are used for evil 96% of the time.
399 votes -
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()397 votes -
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.
339 votes -
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…
314 votes -
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…
287 votes -
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).…
284 votes -
C# support static extension methods like f#
C# support static extension methods like f#
268 votes -
Automaticaly check object nullity before access some member
When we use Linq is very common to check object nullity before access some member
var query =
from t in dc.table
select new {
StringValue = i.Referency1 != null && i.Referency1.Referency2 != null ? i.Referency1.Referency2.StringValue : null,
IntValue = i.Referency1 != null && i.Referency1.Referency2 != null ? (int?)i.Referency1.Referency2.IntValue : null,
};So.. with a new syntax we can simplify the access:
var query =
from t in dc.table
select new {
StringValue = i.Referency1?.Referency2?.StringValue,
IntValue = i.Referency1?.Referency2?.IntValue,
};If the object to be acessed is null, the result will be automaticaly null, the result type becomes Nulable<> for value…
258 votes -
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…
250 votes -
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.233 votes -
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…
229 votes
- Don't see your idea?