New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

C# language support status #829

Open
dgrunwald opened this Issue Aug 27, 2017 · 2 comments

Comments

2 participants
@dgrunwald
Member

dgrunwald commented Aug 27, 2017

C# 1

  • XmlDoc (see also #163)
  • switch(string) (see Switch tag as well)
  • goto case -> #316
  • params
  • unsafe -> #924

C# 2 (VS 2005)

  • Generics
  • Partial types
  • Anonymous methods
  • Iterators
  • Nullable types -> Nullable<T>
  • Getter/setter separate accessibility
  • Method group conversions (delegates)
  • Co- and Contra-variance for delegates and interfaces
  • Static classes
  • Delegate inference

C# 3 (VS 2008)

  • Implicitly typed local variables
  • Object and collection initializers
  • Auto-Implemented properties
  • Anonymous types
  • Extension methods
  • Query expressions
  • Lambda expression
  • Expression trees
  • Partial methods

C# 4 (VS 2010)

  • Dynamic binding -> #154
  • Named arguments -> #950
  • Optional arguments -> #1083
  • Generic co- and contravariance
  • Embedded interop types ("NoPIA")

C# 5 (VS 2012)

  • Asynchronous methods
  • Caller info attributes

C# 6 (VS 2015)

  • Compiler-as-a-service (Roslyn)
  • Import of static type members into namespace
  • Exception filters (see #761)
  • Await in catch/finally blocks
  • Auto property initializers
  • Default values for getter-only properties
  • Expression-bodied members
  • Null propagator (null-conditional operator, succinct null checking)
  • String interpolation (see #1012)
  • nameof operator
  • Dictionary initializer
  • Allow 'Add' extension methods in collection initializers

C# 7.0 (Visual Studio 2017)

C# 7.1 (Visual Studio 2017 version 15.3)

C# 7.2 (Visual Studio 2017 version 15.4)

C# 7.3 (Visual Studio 2017 version 15.7)

@dgrunwald dgrunwald changed the title from newcompiler C# language support status to newdecompiler C# language support status Aug 27, 2017

@sharwell

This comment has been minimized.

Show comment
Hide comment
@sharwell

sharwell Aug 28, 2017

Contributor

💡 I noticed you have nameof operator crossed out. While this is typically not possible due to lack of information in the compiler output, it would be good to support it in limited cases, such as the paramName argument for ArgumentException and derived types, which is likely to align with the name of a parameter visible in the current scope.

Contributor

sharwell commented Aug 28, 2017

💡 I noticed you have nameof operator crossed out. While this is typically not possible due to lack of information in the compiler output, it would be good to support it in limited cases, such as the paramName argument for ArgumentException and derived types, which is likely to align with the name of a parameter visible in the current scope.

@sharwell

This comment has been minimized.

Show comment
Hide comment
@sharwell

sharwell Aug 28, 2017

Contributor

💡 I noticed you have Caller Info attributes crossed out. While this is typically not possible, one way it could be leveraged is intentionally omitting arguments (and allowing defaults to apply) in cases where the IL passes literal arguments which are known to align with the actual values that would be inserted by these attributes. The CallerMemberNameAttribute would work without additional considerations. If other information is desired, the #line directive could be used to set the file name and line number for the call site.

Contributor

sharwell commented Aug 28, 2017

💡 I noticed you have Caller Info attributes crossed out. While this is typically not possible, one way it could be leveraged is intentionally omitting arguments (and allowing defaults to apply) in cases where the IL passes literal arguments which are known to align with the actual values that would be inserted by these attributes. The CallerMemberNameAttribute would work without additional considerations. If other information is desired, the #line directive could be used to set the file name and line number for the call site.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment