Skip to content
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

New in csharp7 #1188

Merged
merged 5 commits into from
Nov 13, 2016
Merged

New in csharp7 #1188

merged 5 commits into from
Nov 13, 2016

Conversation

BillWagner
Copy link
Member

Fixes #961.

Describe the new features in the C# language.

@saldana
Copy link

saldana commented Oct 28, 2016

Open Publishing Build Service: The pull request content has been published and here are some changed files links of this time:

Status: SucceededWithWarning. Message: Warning occurred: Invalid file link:(~/docs/csharp/getting-started/media/oublish.jpg). Referenced by file: docs/csharp/getting-started/publishing-with-visual-studio.md at line: 26...
Open Publishing Report.

@BillWagner BillWagner added the WIP label Oct 31, 2016
@BillWagner BillWagner removed the WIP label Oct 31, 2016
@saldana
Copy link

saldana commented Oct 31, 2016

Open Publishing Build Service: The pull request content has been published and here are some changed files links of this time:

Status: SucceededWithWarning. Message: Warning occurred: docs/core/tools/project-json.md contains illegal link: #supressParent. The file docs/core/tools/project-json.md doesn't contain a bookmark named supressParent...
Open Publishing Report.

@saldana
Copy link

saldana commented Oct 31, 2016

Open Publishing Build Service: The pull request content has been published and here are some changed files links of this time:

Status: SucceededWithWarning. Message: Warning occurred: docs/standard/language-independence.md contains illegal link: #Types-and-type-member-signatures. The file docs/standard/language-independence.md doesn't contain a bookmark named Types-and-type-member-signatures...
Open Publishing Report.

@BillWagner
Copy link
Member Author

BillWagner commented Nov 2, 2016

This is ready for review.

@MadsTorgersen I think this content is good. However, I'd appreciate a quick browse if you have the time. Or, if you want to recommend others on the team, I'd welcome more eyes.

/cc @mairaw @stevehoag @mairaw

@saldana
Copy link

saldana commented Nov 2, 2016

Open Publishing Build Service: The pull request content has been published and here are some changed files links of this time:

Status: SucceededWithWarning. Message: Warning occurred: docs/core/tools/dotnet-install-script.md contains illegal link: docs/core/tools/global-json.md#sdkversion. The file docs/core/tools/global-json.md doesn't contain a bookmark named sdkversion...
Open Publishing Report.

@BillWagner
Copy link
Member Author

/cc @jaredpar for a tech review.

The remainder of this topic discusses each of the features. For each feature,
you'll learn the reasoning behind it. You'll learn the syntax. You'll see
some sample scenarios where using the new feature will make you more
productive as a developer.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I personally would combine these into a single sentence (reading behind it, you'll learn..., and you'll see). But feel free to ignore the comment if you disagree -- I have a preference for long sentences.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm going to leave that one. I tried it as one sentence, and it felt like quite a run on.


## `out` variables

The existing syntax that supports `out` parameter has been improved
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

typo: parameters

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

fixed

You can now declare `out` variables in the argument list of a method call,
rather than writing a separate declaration statement:

[!code-csharp[OutVariableDeclarations](../../samples/snippets/csharp/new-in-7/new-in-7/program.cs#01_OutVariableDeclarations "Out variable declarations")]
Copy link
Contributor

@rpetrusha rpetrusha Nov 10, 2016

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think that it would be useful, where it's applicable, to show the pre-C# 7 syntax and then the C# 7 syntax. On the one hand, it should have been obvious, but it actually took me several minutes to parse the sentence and understand what had changed. An "before" example would make it completely obvious.

Actually, take that back -- you've done it below. I think that I would place it first, which I think provides greater clarity.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Fixed


[!code-csharp[OutVariableOldStyle](../../samples/snippets/csharp/new-in-7/new-in-7/program.cs#03_OutVariableOldStyle "classic out variable declaration")]

This small language change improves your productivity in a couple ways.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

either "a couple of ways" or (better) "several ways"

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

fixed.

[!code-csharp[OutVariableOldStyle](../../samples/snippets/csharp/new-in-7/new-in-7/program.cs#03_OutVariableOldStyle "classic out variable declaration")]

This small language change improves your productivity in a couple ways.
First, the code is easier to read. You declare the out variable where you
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Perhaps do this as a three-item bulleted list, which also should include the scope paragraph.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

fixed.

Copy link
Contributor

@stevehoag stevehoag left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Well written and easy to understand. Just a few minor nits...

@@ -16,64 +16,539 @@ ms.assetid: fd41596d-d0c2-4816-b94d-c4d00a5d0243
# What's new in C# 7

C# 7 adds a number of new features to the C# language:

* [`out` variables](#out-variables)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It looks strange to me to see language keyword styling in a list or in a heading. I would expect to see the style applied within paragraphs, but not elsewhere. Should 'out' and other keywords in this article be styled as plain text?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I checked with @mairaw and while it does look a bit strange, it's the right styling. Otherwise, the keyword might get localized.

your design intent. But sometimes that rich syntax requires extra
work with minimal benefit. You may often write methods that need a simple
structure containing more than one data element. These scenarios are
why *Tuples* were added to C#. Tuples are lightweight data structures
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Should Tuples be lowercase here?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Fixed.


### Deconstruction
You can also provide a simailar deconstruction for any type in .NET. This is
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

similar?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

fixed

done by writing a `Deconstruct` method as a member of the class. That
`Deconstruct` method provides a set of `out` arguments for each of the
properties you want to extract. Consider
this `Point` class that provides a deconstructor method that extracts
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

deconstructor > 'Deconstruct'

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

That's correct. The general term is 'deconstructor', but the method name is Deconstruct.

Consistency FTW!


## Pattern matching

*Pattern Matching* is a feature where you can implement method dispatch on
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Shouldn't matching be lowercase?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

fixed.

type, so using it means allocating an object. In cases where a
method declared with the `async` modifier returns a cached result, or
completes synchronously, the extra allocations can become a significant
time cost in hot paths.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is "hot paths" a common term? Might be hard to localize.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

fixed.


### digit separators
The digit separate can be used with `decimal`, `float` and `double`
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

separate > seperator

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

fixed.

keywords: C#, .NET, .NET Core, Latest Features, What's New, local functions, lambda expressions
author: BillWagner
manager: wpickett
ms.date: 10/27/2016
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Add ms.author:

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

fixed.

Second, lambda expressions are implemented by instantiating a delegate
and invoking that delegate. Local functions are implemented as method calls.
The instantiation necessary for lambda expressions means extra memory
allocations, which may be a performance factor in hot code paths.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Again, is "hot code path" the right term?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Fixed.

While local functions may seem redundant to lambda expressions,
they actually serve different purposes and have different uses.
Local functions are more efficient for the case when you want
to write a function that is called only from in the context of
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

"from in"?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

fixed.

you minimize the chance of misuse.

The most common use for this feature will be the `TryParse` pattern. In this
pattern, a method returns a `bool` indicating success or failure, and an
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

no comma before "and"

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

fixed.


The most common use for this feature will be the `TryParse` pattern. In this
pattern, a method returns a `bool` indicating success or failure, and an
`out` variable that provides the result, in cases when the method succeeds.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

suggestion: ...that provides the result if the method succeeds.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

fixed.


## Tuples

### Named and unnamed Tuples
The syntax used for classes and structs provides a rich syntax to explain
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The syntax...provides a rich syntax is awkward. Perhaps, "C# provides a rich syntax for classes and structs to explain..."

The syntax used for classes and structs provides a rich syntax to explain
your design intent. But sometimes that rich syntax requires extra
work with minimal benefit. You may often write methods that need a simple
structure containing more than one data element. These scenarios are
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Possibly instead of "These scenarios are why...", "To support these scenarios..."

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

fixed.

work with minimal benefit. You may often write methods that need a simple
structure containing more than one data element. These scenarios are
why *Tuples* were added to C#. Tuples are lightweight data structures
that contain multiple elements. You can't define methods, you simply
Copy link
Contributor

@rpetrusha rpetrusha Nov 10, 2016

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I wouldn't start with what a tuple is lacking. Possibly, "Tuples are lightweight data structures that contain multiple fields to represent the data members of the tuple. The fields are not validated, and you cannot define your own methods."
These still are fields, aren't they?

[!code-csharp[NamedTuple](../../samples/snippets/csharp/new-in-7/new-in-7/program.cs#05_NamedTuple "Named tuple")]

> [!NOTE]
> The new features in Tuples require the `System.ValueTuple` type. For Visual Studio 15
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think that you can change this to @System.ValueTuple. Is that OK, @mairaw
Also, I'd change this to read, "The new tuples features..." I don't think that I would capitalize Tuples.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Fixed.

side of the assignment, `alpha` and `beta` are ignored because they conflict
with the names on the left side, `first` and `second`.

The examples above show the basic syntax to declare tuples. Tuples are
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

These next two paragraphs are partly repetitive and somewhat disorganized. After "Tuples provide a simple syntax...", I'd show the example that returns the min/max values. Then follow with a bulleted list of the advantages (Simplicity of syntax -- and possibly compare it with the syntax of instantiating a tuple using a tuple constructor, which is a nightmare; no need to define class/struct; no need to create a new symbol; more efficient and more productive.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Great suggestion. Fixed.

[!code-csharp[CallingTupleMethod](../../samples/snippets/csharp/new-in-7/new-in-7/program.cs#09_CallingTupleMethod "Calling a tuple returning method")]

There may be times when you want to unpackage the members of a tuple that
was returned from a method. You can do that by declaring separate variables
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

were returned

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

fixed.

for public APIs.

Second, this method is returning the indices to the item in the matrix.
That leads callers to write code that uses those indices to dereference
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

dereference the matrix

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

fixed

There are many issues with this code. First of all, it's a public
method that's returning a tuple. The language supports this, but
user defined types (either classes or structs) are preferred
for public APIs.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

for public, or for non-public?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It is correct, Tuples should be limited to private and internal methods.


[!code-csharp[UpdateItemFromIndices](../../samples/snippets/csharp/new-in-7/new-in-7/program.cs#21_UpdateItemFromIndices "Update Item From Indices")]

That you'd rather write is a methood that would return a *reference*
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Awkward sentence, and "methood" has a typo.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Fixed.

this by using unsafe code and returning a pointer to an `int` in previous versions.

Let's walk through a series of changes to demonstrate the ref local feature
and show how to create a method that returns a reference to the internal storage.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

"to internal storage"

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

fixed.

## Local functions

## Expression bodied everything (Preview 5)
Many designs for classes may include methods that are called from only
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Many designs for classes include, or designs for classes may include...

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

fixed.

in which is it declaraed.

There are two very common use cases for local functions: public iterator
methods and public async methods. Both types of methods generate
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

comma before "and"

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think it reads better without it.

methods and public async methods. Both types of methods generate
code that reports errors later than programmers might expect. In
the case of iterator methods, any exceptions are observed only
when calling code enumerates the returned sequence. In the case
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

code that

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

fixed.

`yield return` syntax. However, there are potential problems with this
refactoring. The private method should only be called from the public
interface method, because otherwise all argument validation is skipped.
Readers of the class must discover this fact by reading the entire class,
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

no comma

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

fixed.

The version above makes it clear that the local method is referenced
only in the context of the outer method. The rules for local functions
also ensure that a developer can't accidentally call the local function
from another location in the class, bypassing the argument validation.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

in the class and bypass...

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

fixed.


Not available in Preview 5
The decision that `throw` was a statement meant that there
were C# constructs where you could not use it. These locations
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

constructs instead of locations, or simply delete locations.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

fixed.

> [!NOTE]
> Both of the preceding constructs will cause exceptions to be thrown during
> the construction of an object. Those are often difficult to recover from.
> For that reason, designs that throw exceptions during construction can
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

are, not can be

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

fixed.

However, there are a number of reasons to prefer using local functions
instead of defining and calling lambda expressions.

First, for lambda expressions the compiler must create an anonymous class
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

comma after expressions

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

fixed

@rpetrusha
Copy link
Contributor

I've finished reviewing this. It's really well done, Bill!
@BillWagner

@saldana
Copy link

saldana commented Nov 10, 2016

❌ Validation status: errors

File Status Preview URL Details
.gitattributes ✅Succeeded Details
docs/csharp/csharp-7.md ✅Succeeded Details
docs/csharp/local-functions-vs-lambdas.md ✅Succeeded Details
docs/csharp/pattern-matching.md ✅Succeeded Details
docs/csharp/tour-of-csharp/expressions.md ✅Succeeded Details
docs/csharp/tuples.md ✅Succeeded Details
docs/toc.md ✅Succeeded Details
samples/snippets/csharp/new-in-7/new-in-7.sln ✅Succeeded Details
samples/snippets/csharp/new-in-7/new-in-7/App.config ✅Succeeded Details
samples/snippets/csharp/new-in-7/new-in-7/AsyncWork.cs ✅Succeeded Details
samples/snippets/csharp/new-in-7/new-in-7/Iterator.cs ✅Succeeded Details
samples/snippets/csharp/new-in-7/new-in-7/MathUtilities.cs ✅Succeeded Details
samples/snippets/csharp/new-in-7/new-in-7/MatrixSearch.cs ✅Succeeded Details
samples/snippets/csharp/new-in-7/new-in-7/Point.cs ✅Succeeded Details
samples/snippets/csharp/new-in-7/new-in-7/Program.cs ✅Succeeded Details
samples/snippets/csharp/new-in-7/new-in-7/Properties/AssemblyInfo.cs ✅Succeeded Details
samples/snippets/csharp/new-in-7/new-in-7/new-in-7.csproj ✅Succeeded Details
samples/snippets/csharp/new-in-7/new-in-7/packages.config ✅Succeeded Details
samples/snippets/csharp/new-in-7/new-in-7/patternmatch.cs ✅Succeeded Details

For more details, please refer to the build report.

Note: If you changed an existing file name or deleted a file, broken links in other files to the deleted or renamed file are listed only in the full build report.

@saldana
Copy link

saldana commented Nov 10, 2016

❌ Validation status: errors

File Status Preview URL Details
.gitattributes ✅Succeeded Details
docs/csharp/csharp-7.md ✅Succeeded Details
docs/csharp/local-functions-vs-lambdas.md ✅Succeeded Details
docs/csharp/pattern-matching.md ✅Succeeded Details
docs/csharp/tour-of-csharp/expressions.md ✅Succeeded Details
docs/csharp/tuples.md ✅Succeeded Details
docs/toc.md ✅Succeeded Details
samples/snippets/csharp/new-in-7/new-in-7.sln ✅Succeeded Details
samples/snippets/csharp/new-in-7/new-in-7/App.config ✅Succeeded Details
samples/snippets/csharp/new-in-7/new-in-7/AsyncWork.cs ✅Succeeded Details
samples/snippets/csharp/new-in-7/new-in-7/Iterator.cs ✅Succeeded Details
samples/snippets/csharp/new-in-7/new-in-7/MathUtilities.cs ✅Succeeded Details
samples/snippets/csharp/new-in-7/new-in-7/MatrixSearch.cs ✅Succeeded Details
samples/snippets/csharp/new-in-7/new-in-7/Point.cs ✅Succeeded Details
samples/snippets/csharp/new-in-7/new-in-7/Program.cs ✅Succeeded Details
samples/snippets/csharp/new-in-7/new-in-7/Properties/AssemblyInfo.cs ✅Succeeded Details
samples/snippets/csharp/new-in-7/new-in-7/new-in-7.csproj ✅Succeeded Details
samples/snippets/csharp/new-in-7/new-in-7/packages.config ✅Succeeded Details
samples/snippets/csharp/new-in-7/new-in-7/patternmatch.cs ✅Succeeded Details

For more details, please refer to the build report.

Note: If you changed an existing file name or deleted a file, broken links in other files to the deleted or renamed file are listed only in the full build report.

@saldana
Copy link

saldana commented Nov 10, 2016

❌ Validation status: errors

File Status Preview URL Details
.gitattributes ✅Succeeded Details
docs/csharp/csharp-7.md ✅Succeeded Details
docs/csharp/local-functions-vs-lambdas.md ✅Succeeded Details
docs/csharp/pattern-matching.md ✅Succeeded Details
docs/csharp/tour-of-csharp/expressions.md ✅Succeeded Details
docs/csharp/tuples.md ✅Succeeded Details
docs/toc.md ✅Succeeded Details
samples/snippets/csharp/new-in-7/new-in-7.sln ✅Succeeded Details
samples/snippets/csharp/new-in-7/new-in-7/App.config ✅Succeeded Details
samples/snippets/csharp/new-in-7/new-in-7/AsyncWork.cs ✅Succeeded Details
samples/snippets/csharp/new-in-7/new-in-7/Iterator.cs ✅Succeeded Details
samples/snippets/csharp/new-in-7/new-in-7/MathUtilities.cs ✅Succeeded Details
samples/snippets/csharp/new-in-7/new-in-7/MatrixSearch.cs ✅Succeeded Details
samples/snippets/csharp/new-in-7/new-in-7/Point.cs ✅Succeeded Details
samples/snippets/csharp/new-in-7/new-in-7/Program.cs ✅Succeeded Details
samples/snippets/csharp/new-in-7/new-in-7/Properties/AssemblyInfo.cs ✅Succeeded Details
samples/snippets/csharp/new-in-7/new-in-7/new-in-7.csproj ✅Succeeded Details
samples/snippets/csharp/new-in-7/new-in-7/packages.config ✅Succeeded Details
samples/snippets/csharp/new-in-7/new-in-7/patternmatch.cs ✅Succeeded Details

For more details, please refer to the build report.

Note: If you changed an existing file name or deleted a file, broken links in other files to the deleted or renamed file are listed only in the full build report.

@rpetrusha
Copy link
Contributor

I think that this looks good. The only thing that I noticed was that @System.Tuple didn't resolve as a link.

Copy link
Member

@jaredpar jaredpar left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Got about 1/3 of the way through. Will finish up later tonight.

* No need to assign an initial value.
- By declaring the `out` variable where it is used in a method call, you can't accidentally use it before it is assigned.
* The scope of the variable is minimized.
- The `out` variable is scoped to the enclosing block. By minimizing the scope, you avoid name collisions with other variables and you minimize the chance of misuse.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The scope of the out variable is generally the same as the pre-C# 7.0 version where it is declared as a local on the line above.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I removed that paragraph.

* The scope of the variable is minimized.
- The `out` variable is scoped to the enclosing block. By minimizing the scope, you avoid name collisions with other variables and you minimize the chance of misuse.

The most common use for this feature will be the `TryParse` pattern. In this
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Consider going more general here and saying the Try pattern. It is as likely to be used for TryParse as it is for TryGet.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

fixed.


## Tuples

### Named and unnamed Tuples
C# provides a rich used for classes and structs provides to explain
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The word "used" seems like a typo. Did you mean "syntax" given the next sentence?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

fixed.

work with minimal benefit. You may often write methods that need a simple
structure containing more than one data element. To support these scenarios
*tuples* were added to C#. Tuples are lightweight data structures
that contain multiple elements. Tuples are lightweight data structures
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Two sentences that start with "tuples are lightweight ...". Seems like a typo.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

fixed.

The fields are not validated, and you cannot define your own methods

> [!NOTE]
> Tuples were available before C# 7, but had many limitations. Most importantly,
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

May want to clarify they were available as an API, not as a feature of the language.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

fixed.


Using tuples in this way offers several advantages:

* You save the work of creating a `class` or a `struct` that defines the type returned.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Consider "authoring" instead of "creating".

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

done.

public double X { get; }
public double Y { get; }

public void Deconstruct(out double X, out double Y)
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Parameter names should be lower case.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

done.

WriteLine(Y);

#region 13_DeconstructNames
(double horizontalDistance, double verticalDistance) = p;
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

One variation of deconstruct that I didn't see in the samples is the var case. It's possible to deconstruct Point as such:

var (x, y) = p;

Wanted to make sure you were aware of that feature.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks. I am covering that in the deep dive on Tuples. (Next PR coming)

The C# language has two other rules that protect you from mis-using
the `ref` locals and returns:

* You cannot assign a `ref` variable to a value.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This seems backwards. Can't assign a value to a ref variable.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

fixed. Thanks.

@saldana
Copy link

saldana commented Nov 13, 2016

✅ Validation status: passed

File Status Preview URL Details
docs/csharp/csharp-7.md ✅Succeeded View Details
docs/csharp/local-functions-vs-lambdas.md ✅Succeeded View Details
docs/csharp/pattern-matching.md ✅Succeeded View Details
docs/csharp/tour-of-csharp/expressions.md ✅Succeeded View Details
docs/csharp/tuples.md ✅Succeeded View Details
docs/toc.md ✅Succeeded View Details

For more details, please refer to the build report.

Note: If you changed an existing file name or deleted a file, broken links in other files to the deleted or renamed file are listed only in the full build report.

@BillWagner BillWagner merged commit 1442cba into dotnet:master Nov 13, 2016
@BillWagner BillWagner deleted the new-in-csharp7 branch November 13, 2016 20:55
alexinea added a commit to dotnetcore-internal/core-doc-cn that referenced this pull request Dec 29, 2016
* Basic types, classes and structs (dotnet#1134)

* Basic types, classes and structs

Split Types topic and added C# 7 literala features

* Fixed snippet links

* Fixed two more links

* Addressed all review comments

* Removed wrenches again

after esolving conflict

* simplify getting IP address (dotnet#1107)

* Grammar error (dotnet#1145)

I suppose that "to compile and the code" is wrong, it should be "to compile the code"

* Don't rely on `docker exec` for getting ip address (dotnet#1108)

* Update index.md (dotnet#1146)

* adding some new links (dotnet#1139)

* Patch 1 (dotnet#1147)

* Update generating-fsharp-types-from-edmx.md

Removed erroneous ) from the select statement in the example demonstrating a where clause

* Update generating-fsharp-types-from-edmx.md

Correcting the join statement in the example for joining two tables

* Update generating-fsharp-types-from-edmx.md

Under the section "Creating an EDMX file," adding the link to the "Configuring the Entity Data Model" section.

* Update generating-fsharp-types-from-edmx.md

Correcting indentation for the changeHireDate function

* Fix title and metadata (dotnet#1149)

* Reviewed the CLI topic (dotnet#1124)

* Reviewed the CLI topic

* added version

* undoing a small change

* Fix missing link

Fix missing link for raw markdown template.

* 🔧 small fixes (dotnet#1153)

* Updates to the CLI commands reference (dotnet#1129)

* reviewed cli commands topics

* removed byline

* minor fixes

* fixed broken links

* addressed feedback

* clarified language

* fixed typo

* Feature/fsharp app service (dotnet#1156)

* Add F# App Service API example

* Add Hosting F# in a web application on Azure link

* Update native dependencies section to specify RID correctly (dotnet#1144)

* Update native dependencies section to specify RID correctly

* Address feedback

* Address @mairaw feedback I missed

* adding new video (dotnet#1154)

* Adding images for getting started VS Code doc

* Fix <- in markdown (dotnet#1159)

* Corrected typo

* Added F# with Mobius for Spark on Azure (dotnet#1161)

* Wrong place for image

* Wrong place for image

* Wrong place for image

* Wrong place for image

* fix broken link (dotnet#1166)

* fix broken link

* fixed another broken link

* Fix Binary Search Tree insert function (dotnet#1167)

* remove redundant "*" (dotnet#1168)

* Update portability-analyzer.md (dotnet#1155)

* Update portability-analyzer.md

Made some improvements to the topic

* updates

* Update index.md (dotnet#1163)

* Update index.md

Fix links for dotnet-apiport.

* Update index.md

* adding macOS Sierra support (dotnet#1164)

* adding sierra support

* added missing word

* Hello World with Visual Studio 2015

* Fix extension docs (dotnet#1178)

See dotnet/fsharp#1670

* excluding tokens from ops validation (dotnet#1182)

* renamed repo/fixed headings (dotnet#1186)

* Corrected publishing warnings (dotnet#1189)

* Corrected publishing warnings

* Fixed two more broken links.

* fixed broken link

* Update README.md

* Remove pointer to github.com/microsoft/docs/readme.md (dotnet#1191)

* updated netstandard version (dotnet#1169)

* fixed repo name (dotnet#1193)

* added missing H1 (dotnet#1192)

* Update toc.md

* Updating languages used in sample article (dotnet#1199)

* Methods topic ported from MSDN and revised.

* Incorporated comments.

* Corrected publishing errors

* Added changes lost during merge.

* Update toc.md

* fixed broken anchors (dotnet#1194)

* fixed broken anchors
* fixed more links

* fixed more links

* fixed links

* fixed more links

* fixed casing

* more fixes

* more fixes

* Update index.md

* reverting to previous index structure.

* fix broken-links for app-types document (dotnet#1203)

* fix broken-links for app-types document

Responding to a user comment on
https://docs.microsoft.com/en-us/dotnet/articles/core/tutorials/using-wi
th-xplat-cli

* fix edit paste error of .md.md

* fixing links again

The index.md cannot be part of the url. The build removes ‘.md’, but
keeps ‘index’. That fails.

* fix typo in links

* Propose VS Code Getting Started

Getting started page for .NET Core, C# extension, and VS Code.

* Deleted "Next Steps" Section

Let's assume the surrounding documentation on the .NET Docs is where users will want to browse next.

* Deleted Wrench, Added VS Code Install Step

* Deleted "blazing" and "fun"

* Add images

* Fixed Pic links

* Fixed old commits

* fixing typo (dotnet#1202)

* Update global-json.md (dotnet#996)

* Update global-json.md

* removing unkown properties

* updated topic

* Two edits, and modified TOC

* Config tweak for PDF.

* Change the format

* respond to remaining feedback on 1077

Also, update the date and add the ms.author metadata.

indent sample to preserve one list

I’ll examine the build output on staging and then squash.

* Update expressions.md

Update expressions.md

* Respond to feedback on PR dotnet#1076

Also, updated the publish date, and add ms.author metadata.

* Formatting for the config.

* Fix formatting console-teleprompter.md

Update console-teleprompter.md

Update console-teleprompter.md

Update console-teleprompter.md

* respond to remaining feedback on PR dotnet#1073

Also, updated the freshness date, and add the ms.author metadata tag.

Respond to updated feedback

Respond to @rpetrusha feedback.

Fix a few broken links

* clean up first sentence (dotnet#1214)

* Recommend snippet syntax (dotnet#1209)

* update template to recommend code snippets

We prefer them to inline code that doesn’t run through the CI build.

* Fix contributing link

* update list of languages to the correct smaller set.

* respond to feedback

* respond to feedback.

* Add link to and sample code application to post (dotnet#1215)

* add link to and sample code application to post

* remove unneeded files

* Kick off live build again.

* create initial contributing.md for fast releases. (dotnet#1206)

* create initial contributing.md for fast releases.

* fix markdown syntax issue.

* fix the link to the main docs folder.

* one more time, fixing the link.

* add note about contributing.md location.

* Add any contributing.md files to the exclude list

We don’t want them on the live site.

* stashing to switch branches.

* update the link in the warning include.

* update with correct current release terms.

* Update for feedback.

* new hub page design (dotnet#1220)

* new hub page design

* adding svg extension

* 🐤 Config change.

* fix typo (dotnet#1217)

* November changes (dotnet#1157)

* Updates for november release

* Add getting-started to About .NET

* Change links

* Update to Platform as the name

* fix links

* Fix links in tour

* Fix link

* Update names

* Update Framework Name

* Remove About and replace with .NET Platform Guide

* Fixes

* Change .NET Framework to .NET Framework on Docker

* Remove about article and make it the index

* Update title in index file

* Updates

* Updates

* fix link

* fix link

* fix link

* Redirects don't support folder renames

* fix links

* Move files

* feedback

* fix link

* Undo GUID change

* Updates

* fix broken link (dotnet#1222)

* Adding MASTER to PDF build.

* Hubpage (dotnet#1227)

* testing image location

* changing image links

* fix more image links

* Update attributed.md: Pre -> Previous (dotnet#1224)

The button text only shows "Pre", which is different from the "Previous" button in other articles in this section.

* Add git to prerequisites for getting started with F# on vscode article (dotnet#1180)

* Add git to prerequisites

* Update getting-started-vscode.md

* Update getting-started-vscode.md

* fixing some links (dotnet#1228)

* Fix heading in F# vscode article (dotnet#1229)

Was missing 'with'.

* New in csharp7 (dotnet#1188)

* Create What's new in C# 7 content

* fix a merge mistake.

* update per editorial feedback.

* Fixing OPS build

* address review comments.

From @jaredpar

* updates for the hub page

* VS page conflict fix

* testing hover image link

* fixing link

* updating Hub image urls

* changed links

* trying to fix build warnings

* Spelling error (dotnet#1234)

* 📚 migration changes (dotnet#1235)

* migration files

* checkin changes

* more fixes

* last fixes

* fixed broken links

* ran link fix tool again

* Removed Wrench -- Issue dotnet#1213

* Removed wrench -- issue dotnet#1213

* Removed wrench -- Issue dotnet#1213

* The C# MicroServices tutorial left out an install of node.js's npm manager; added link to node.js. (dotnet#1219)

* Updated the tutorial to help any user who is not coming from a javascript background who may not have npm installed; provided link to npm for their download

* Grammar changes

* Moved the instruction to install npm into its own paragraph and changed the logical structure of the instructions to follow.

* Removed to be installed

* fixing broken link (dotnet#1223)

* fixing broken link

* Update warning.md

* Update index.md (dotnet#1151)

add link to simple introduction to creating an azure function in f# on azure

* updated featured png fallbacks, hiding breadcrumb (dotnet#1238)

* updated featured png fallbacks, hiding breadcrumb

* updated panel images

* remove dead wood and market speak (dotnet#1183)

* remove dead wood and market speak

see https://msdnstage.redmond.corp.microsoft.com/en-us/ce-csi-docs/contributors-guide-internal/style-and-voice?branch=master

For such a high visibility topic can't we run it by an editor?

* removed Core

* adding new CLI nuget commands (dotnet#1218)

* adding new CLI nuget commands

* small change

* addressed feedback

* last updates and renamed folder

* Update CLI golden path tutorial for Preview 3.

* macOS images (dotnet#1240)

* Remove Syntax Reference and point to Language Reference (dotnet#1225)

* Finish CLI golden path.

* Fix missed project.json occurrences.

* Move new preview3 docs under the cli-preview3 folder.

* Add .NET Components article (dotnet#1232)

* Add .NET Components article

* Add to TOC and metadata fixes

* Fix error in paragraph

* More fixed

* Reword awkward targeting sentence

* Fix links

* Better picture

* Feedback

* .NET Architectural components as the name name

* Add .NET Platform getting started (dotnet#1241)

* Add .NET Platform getting started

* feedback

* Feedback

* Update hub page to have correct name and link for components (dotnet#1245)

* Add Core vs Framework for server apps article (dotnet#1239)

* Add Core vs Framework for server apps article

* Feedback

* Feedback

* Feedback

* Revised Tour of .NET (dotnet#1236)

* First changes

* Finish up draft of revised tour

* Fix links

* Fix links

* Fix note

* Feedback

* Feedback

* Feedback

* Fix bad link

* redirecting old topics (dotnet#1246)

* readded files to proper redirect them

* added missing toc entry

* fixed redirect url

* Update toc.md

Removed top-level wrenches.

* Initial draft of Hello World app.

* Checkin for class library tutorial.

* Consuming a class library check-in

* Updated for final RC build (dotnet#2)

* Updated for final RC build

Updated screenshots, addressed accessibility, other minor changes

* Updated library topics

* Revised publishing topic, plus corrected typo

* Corrected bad verb tense.

* Addressed comment, added context and additional explanation, corrected title omission

* Addressed additional comments

* fix one build error.

* fix the link URL for a code snippet

* Update toc.md

Updated TOC for new VS 2015 content, removed VS Code wrench and corrected title.

* fixing TOC issue

* Corrected bad links in VS 2017 RC topics.

* Corrected title of library topic in TOC

* top-level getting started portal page

* Fix broken connect links (dotnet#1250)

* fix a bad link

* fix broken links

these came in 3 cases.
1. Some links used ... instead of .. to navigate up a folder.
2. Some links were off by one directory up in navigation.
3. Some links used back-slash instead of slash.
4. Typos.

1 and 2 might be significant if we run the migration script again.

* rename getting started with libraries and fix links

The name had an '_ ' and should have '-' instead

* fix build warnings

* wrong API name:  IsUpperCase -> IsUpper

* Update hub links to actual content (dotnet#1251)

* Update links to actual content

* Add '/'

* Corrected errors, added library topic, fixed typo in another topic

* CLI Preview 3 docs (dotnet#1233)

Add CLI Preview 3 documentation

This will add Preview 3 CLI documentation in a separate folder under docs/core/preview3. The CLI Preview 3 bits 
are the first released bits to contain the MSbuild support and have no support for working with project.json projects. 

Changes done:

* Modified the extensiblity document to add extending the tools via targets in NuGet packages
* Added dependency management documetn that explains how to do package management manually in the new csproj format
* Added csproj reference guide (NOTE: this needs completing)
* Added dotnet-migrate command docs
* Fixed all of the other command references to be correct as to Preview 3 bits

* Add VS 2017 getting started topics.

* Cleanup links and reconcile folder structure with other PRs.

* Add TOC.

* Updated warning (dotnet#1256)

* Update warning.md

* Update warning.md

* fixed toc

* fixing GH alias (dotnet#1260)

* fixing GH alias 

/cc @bleroy

I'm adding myself as the ms.author so I get the incoming feedback and so forth. let me know if you disagree with that.

* fixing broken link

* fixing toc links

* fixed links and some typos (dotnet#1259)

* fixed links and some typos
* more fixes

* Remove about .NET article (dotnet#1249)

* Fix preview 3 download link.

* Fixed merge conflict (dotnet#1265)

Also fixed couple of typos.

* Fix typo (dotnet#1267)

* Update index.md (dotnet#1271)

* Update index.md

* Removing extra a

* fixing broken links (dotnet#1263)

* fixing broken links

* more fixes

* adding missing extension

* Fixed links to preview 2 CLI code (dotnet#1274)

* Fixed included notes (dotnet#1275)

* Remove extraneous brackets

* Fixes miscellaneous issues in VB content (dotnet#1268)

Fixed broken links, removed invalid links, etc.

* Preview 3 edits (dotnet#1273)

* Preview 3 edits

* Added migrate to the list of commands
* Used docfx syntax for notes
* Fixed heading levels in new articles
* Made pseudo-variables in csproj consistent in dependencies
* Remove references to project.json sections from deploying
* Remove F# from dotnet new, since it's not supported
* Added back missing --framework to dotnet test
* Typos, grammar and other small fixes

* Removed unnecessary Overview headings

* fixed TOC (dotnet#1280)

* fixed TOC

* removed wrench

* Fixing broken links (dotnet#1276)

* Fixing broken links

* Attempted to fix cross reference warning

* Link to docs.ms instead of MSDN

Also simplified relative paths

* Absolute urls and other fixes (dotnet#1281)

* absolute urls and other link fixes

* fixed broken link

* fixed issues causing formatting problems

* removed extra parentheses

* fixed broken link

* fixed xref warnings

* Added links to Visual Studio 2017 topics (dotnet#1282)

* Revisions to lambda expressions topic.

* Small syntax fixes

YOu'll => You'll
IgnoreDatamember => IgnoreDataMember

* Fixed bad code snippet tags.

* Minor TOC improvements

* Addressed comments from @shoag

* Additional revisions from Bill and Maira.

* Create detailed article on C# tuples (dotnet#1284)

* Create Tuples content in C# 7 content
Outline and start on first draft.

* finish tuples article and samples

Ready for a final proofread

* proofread, remove wrenches

This is now ready for review.

* respond to all feedback.

Reviews from @svick and @rpetrusha

* fixed typo (dotnet#1296)

* clarify wording of "Functions as First-Class Values" (dotnet#1290)

* custom operators using `?` (dotnet#1291)

added an additional rule for custom operators from the F# 4.0 Spec Section 3.7

* added missing links (dotnet#1295)

* added missing links

* changed links to absolutely links

Thanks @mairaw

* fixed api links

* update input file names for case sensitive file systems (dotnet#1299)

Fixing a customer reported issue.

* remove 'wrench' articles that have been ported (dotnet#1298)

* remove 'wrench' articles that have been ported

Several not-yet-written articles have been covered by the port of the
C# content from MSDN.  These still need to be reviewed and updated, but
they are all now present.

* configure redirects for deprecated articles.

* don't include the file extension on redirects.

* update the path for redirection

* find and replace links to content that moved.

* Add documented example of using a webjob in f# (dotnet#1289)

* f# webjob doc and example

* fix grammar

* added new line

* Updating WebApiClient (dotnet#1304)

Adding missing `using` statements

* Small fixes (dotnet#1303)

* Added keywords metadata field.

* added default values for api ref metadata (dotnet#1300)

* added default values for api ref metadata

* fixing path

* changing to an alias

* Adding Search Scope

* Update docfx.json to add search scope

* removing broken links (dotnet#1312)

* Text, images, code for inheritance tutorial

* Fixed bad code reference

* Corrected another bad code snippet tag.

* Metadata updates (dotnet#1313)

* first round of metadata updates

* secound round of updates

* small update

* Update debugging-with-visual-studio-2017.md

Corrected spelling...

* Add Debug section to VS Code Getting Started (dotnet#1314)

* Add Debug instructions

* Additional changes to inheritance in programming guide.

* Fix broken sentence in discriminated-unions.md (dotnet#1322)

* Updated LINQ topics for C# Concepts section (dotnet#1302)

* Updated LINQ topics for C# Concepts section

Phase one - additional topics will be moved from the Programming Guide
later

* Fixed build errors

* Addressed feedback

* Created a LINQ folder and moved the files; updated links

* Updated TOC with new path

* Updated redirect URLs

* Fixed one more redirect

* Use S110 build tool version for building (dotnet#1328)

* Use 1.22.3 packages and plugin

* Update .openpublishing.publish.config.json

* Revisions to inheritance topic.

* Addressed additional comments

* turning off build comments on PRs (dotnet#1327)

/cc @BillWagner

* fixing tip (dotnet#1320)

* fixed tip style

* test

* readded tip

* content review

* added missing changes

* few more fixes

* rezising asset image

* addressed feedback

* Fixed broken links to LINQ topic (dotnet#1331)

* Fixed broken links to LINQ topic

* fixed merge issues

* Update .openpublishing.publish.config.json

* rid-catalog.md: Add rhel.7-x64 rid (dotnet#1324)

* make readable (dotnet#1325)

* make readable

* rpetrusha feedback

* typo

* Final corrections, corrected code snippet tag.

* Updated TOC to add inheritance topic.

* Changed wrong installation path in documentation. (dotnet#1323)

* Corrected lowercase 'i'

* Updated hub page images from Design (dotnet#1337)

* dotnet#275 string interpolation tutorial for C# (dotnet#1317)

* dotnet#275 string interpolation tutorial for C#

* dotnet#275 move code examples into snippets so they can be run by DocFx

* dotnet#275 corrects and fixes of string interpolation tutorial per review from BillWagner

* dotnet#275 forgot namespace for CultureInfo

* dotnet#275 typo fix

* dotnet#275 remove intro header per recommendation

* update metadata and TOC for tutorial (dotnet#1340)

* update metadata and TOC for tutorial

Also, add a reference to the inheritance tutorial (which was missing at
the time)

* Update string-interpolation.md

* Removed incorrect semocolons from operators (dotnet#1338)

* Fix code without right space. (dotnet#1342)

Fix code without right space.

* Add missing parenthesis (dotnet#1344)

* Update how-to-define-value-equality-for-a-type.md

spelling error

* Update how-to-define-value-equality-for-a-type.md (dotnet#1349)

public and non-public fields is the same thing as fields

e.g.,  x || !x == true

* corrected typo (dotnet#1352)

* fixing warning message (dotnet#1353)

* fixing warning message

* re-added part of the sample

* Update What's new for C# 7 (dotnet#1351)

* Update What's new for C# 7

* re-word a few awkward sentences.

* improve formatting.

* respond to review comments.

* Update F# XML documentation (dotnet#1357)

Removed extraneous stars (bad formatting).

* Fix date format to be mm/dd/yyyy (dotnet#1360)

It was causing the wrong publication date.

* fix typo in class name (dotnet#1361)

As reported on PR dotnet#1351
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
No open projects
Development

Successfully merging this pull request may close these issues.

None yet

7 participants