News

What's In Store for C# 7.0

Developers who have been taking Visual Studio '15' Preview through its paces are getting a good look at a number of key C# 7.0 features, such as tuples and pattern matching.

As C# 7.0 gets nearer to the finish line, C# Program Manager Mads Torgersen noted in a blog post that most of its new features "are coming alive" in the recent release of Visual Studio "15" Preview 4.

For developers who have been taking the preview through its paces, what's generating the most excitement feature-wise are tuples and pattern matching.

"C# 7.0 adds a number of new features and brings a focus on data consumption, code simplification and performance," said Torgersen. "Perhaps the biggest features are tuples, which make it easy to have multiple results, and pattern matching, which simplifies code that is conditional on the shape of data."

Torgersen noted in his blog that the existing options for returning more than one value from a method aren't optimal, so C# 7.0 has introduced tuple types and tuple literals.

However, their functionality goes beyond that.

"Tuples are value types, and their elements are simply public, mutable fields," Torgersen said. "They have value equality, meaning that two tuples are equal (and have the same hash code) if all their elements are pairwise equal (and have the same hash code). This makes tuples useful for many other situations beyond multiple return values. For instance, if you need a dictionary with multiple keys, use a tuple as your key and everything works out right. If you need a list with multiple values at each position, use a tuple, and searching the list etc. will work correctly."

Regarding pattern matching, Torgersen said, "C# 7.0 introduces the notion of patterns, which, abstractly speaking, are syntactic elements that can test that a value has a certain 'shape', and extract information from the value when it does." New patterns include constant patterns, type patterns and var patterns, with more planned for the new language element. For now, the is and case language constructs are enhanced with patterns.

Tuples and pattern matching were met with enthusiasm by several programmers on the Web.

"Pattern matching! Tuples! Awesome, C# 7.0 is scratching two itches I've felt every time I've worked with it," said a commentator on Hacker News.

"Wow! These are some really impressive features," read another HN post. "I started learning F# a few months back and I can see some interesting parallels. Very excited to see Tuples and Pattern Matching."

Reddit reader said: "Ah, tuples. You are soon to join the list of non-hated types. Indeed, I see myself using you often!"

The new features were also lauded among the hundreds (208 and counting) of comments attached to Torgersen's .NET Blog post.

  • "Some great new features -- I'm going to love the ability to return multiple values from a method."
  • "Looking forward to using local functions, returning tuple, deconstructing a tuple directly and expression bodied members."
  • "That's funny -- just yesterday I stumbled over the out parameter and async method problem and ended up using a tuple. Can't wait to get working with the new tuples."
  • "I can't wait to start using these new features, especially the Tuples, which alleviate the need for the bazillion container classes we have lying around."

Besides enhanced tuple functionality (a Tuple class does already exist) and pattern matching, other features that are planned for C# 7.0 (several didn't make it into the latest Visual Studio preview) include: out variables; local functions; literal improvements; ref returns and locals; generalized async return types; more expression bodied members; and more.

With developers being developers, though, most wanted more. Just some of the many features requested by commentators across the aforementioned sites include:

  • Design by contract
  • Postfix conditionals
  • Wildcards (Torgersen said: "It is still uncertain whether wildcards make it into C# 7.0")
  • Supersede/original/replace and source generators
  • Extension properties
  • A suitable cross-platform UI toolkit
  • Easy syntax for immutable records
  • Better immutability support
  • Ability to declare something at non-nullable
  • Anonymous classes with actual class bodies that can implement interfaces
  • Traits
  • Guaranteed not-nullable types
  • Immutable classes
  • Regex expressions just like regexp in JavaScript
  • DateTime expressions
  • Records
  • Macros

More requests for C# features can be found on the Microsoft UserVoice site for the language, where "non-nullable reference types" leads the list with more than 3,300 votes.

While many approved of the new functionality, some complained about too many new features being added to the language, citing language bloat and the dangers of becoming overcomplicated or trying to do too many things.

"It looks like that C# is becoming polluted with all kinds of tricks," said a comment on the blog post.

On Reddit, one reader said: "Wow. The language is really starting to look kitchen sink. It's not a good idea to just add any cool feature you can find in other languages."

"C# is so full of 'features' that code refactoring tools like ReSharper, CodeRush and JustCode became simply indispensable," said a comment on Hacker News. "It is quite hard to be sure, every time, what is the most elegant/compact way of doing things."

Nevertheless, the language is marching on, Torgersen reminded everyone after describing the new features.

"We hope that they all combine to make your code more efficient and clear, and you more happy and productive," Torgersen said. "Please use the 'send feedback' button at the top of the Visual Studio window to tell us if something is not working as you expect, or if you have thoughts on improvement of the features."

About the Author

David Ramel is an editor and writer at Converge 360.

comments powered by Disqus

Featured

  • Hands On: New VS Code Insiders Build Creates Web Page from Image in Seconds

    New Vision support with GitHub Copilot in the latest Visual Studio Code Insiders build takes a user-supplied mockup image and creates a web page from it in seconds, handling all the HTML and CSS.

  • Naive Bayes Regression Using C#

    Dr. James McCaffrey from Microsoft Research presents a complete end-to-end demonstration of the naive Bayes regression technique, where the goal is to predict a single numeric value. Compared to other machine learning regression techniques, naive Bayes regression is usually less accurate, but is simple, easy to implement and customize, works on both large and small datasets, is highly interpretable, and doesn't require tuning any hyperparameters.

  • VS Code Copilot Previews New GPT-4o AI Code Completion Model

    The 4o upgrade includes additional training on more than 275,000 high-quality public repositories in over 30 popular programming languages, said Microsoft-owned GitHub, which created the original "AI pair programmer" years ago.

  • Microsoft's Rust Embrace Continues with Azure SDK Beta

    "Rust's strong type system and ownership model help prevent common programming errors such as null pointer dereferencing and buffer overflows, leading to more secure and stable code."

  • Xcode IDE from Microsoft Archrival Apple Gets Copilot AI

    Just after expanding the reach of its Copilot AI coding assistant to the open-source Eclipse IDE, Microsoft showcased how it's going even further, providing details about a preview version for the Xcode IDE from archrival Apple.

Subscribe on YouTube

Upcoming Training Events