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,100 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,028 votes -
I wish catch multiple exceptions in the same catch
For example:
try
{
// smth}
catch (RemoteException, NamingException , CreateException e)
{
// smth
}994 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; }648 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.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 */ }475 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 :) */}474 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.
455 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."429 votes -
Get rid of #region
My informal analysis concludes that #regions are used for evil 96% of the time.
380 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.
322 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…
283 votes -
C# support static extension methods like f#
C# support static extension methods like f#
263 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…
250 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…
246 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).…
243 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 -
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.
191 votes -
'params' keyword for every list
If you're a C# developer, I bet you've used something like this before:
***** SomeType DoSomething(params AnotherType[] array){...}
It is a lot easier to use the 'params' modifier than to create a new array with all the paremeters of the same type you want to insert in a method, specially when it comes to small test projects.
However, using this comes with a disadvantage: you MUST use the array type. No IList, List<T>, Dictionary<TKey, TValue>, etc.. I believe there is no such reason not to allow these list-like types to use the params keyword. Example:
***** SomeType DoSomething(params ListType list){...}
…
154 votes
- Don't see your idea?