-
Notifications
You must be signed in to change notification settings - Fork 5.9k
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
New in csharp7 #1188
Conversation
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 Build Service: The pull request content has been published and here are some changed files links of this time:
Status: Succeeded. |
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 |
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 Build Service: The pull request content has been published and here are some changed files links of this time:
Status: Succeeded. |
/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. |
There was a problem hiding this comment.
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.
There was a problem hiding this comment.
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 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
typo: parameters
There was a problem hiding this comment.
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")] |
There was a problem hiding this comment.
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.
There was a problem hiding this comment.
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. |
There was a problem hiding this comment.
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"
There was a problem hiding this comment.
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 |
There was a problem hiding this comment.
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.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
fixed.
There was a problem hiding this 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) |
There was a problem hiding this comment.
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?
There was a problem hiding this comment.
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 |
There was a problem hiding this comment.
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?
There was a problem hiding this comment.
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 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
similar?
There was a problem hiding this comment.
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 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
deconstructor > 'Deconstruct'
There was a problem hiding this comment.
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 |
There was a problem hiding this comment.
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?
There was a problem hiding this comment.
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. |
There was a problem hiding this comment.
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.
There was a problem hiding this comment.
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` |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
separate > seperator
There was a problem hiding this comment.
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 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Add ms.author:
There was a problem hiding this comment.
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. |
There was a problem hiding this comment.
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?
There was a problem hiding this comment.
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 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
"from in"?
There was a problem hiding this comment.
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 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
no comma before "and"
There was a problem hiding this comment.
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. |
There was a problem hiding this comment.
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.
There was a problem hiding this comment.
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 |
There was a problem hiding this comment.
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 |
There was a problem hiding this comment.
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..."
There was a problem hiding this comment.
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 |
There was a problem hiding this comment.
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 |
There was a problem hiding this comment.
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.
There was a problem hiding this comment.
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 |
There was a problem hiding this comment.
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.
There was a problem hiding this comment.
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 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
were returned
There was a problem hiding this comment.
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 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
dereference the matrix
There was a problem hiding this comment.
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. |
There was a problem hiding this comment.
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?
There was a problem hiding this comment.
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* |
There was a problem hiding this comment.
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.
There was a problem hiding this comment.
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. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
"to internal storage"
There was a problem hiding this comment.
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 |
There was a problem hiding this comment.
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...
There was a problem hiding this comment.
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 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
comma before "and"
There was a problem hiding this comment.
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 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
code that
There was a problem hiding this comment.
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, |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
no comma
There was a problem hiding this comment.
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. |
There was a problem hiding this comment.
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...
There was a problem hiding this comment.
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 |
There was a problem hiding this comment.
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.
There was a problem hiding this comment.
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 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
are, not can be
There was a problem hiding this comment.
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 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
comma after expressions
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
fixed
I've finished reviewing this. It's really well done, Bill! |
❌ Validation status: errors
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. |
❌ Validation status: errors
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. |
I think that this looks good. The only thing that I noticed was that @System.Tuple didn't resolve as a link. |
There was a problem hiding this 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. |
There was a problem hiding this comment.
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.
There was a problem hiding this comment.
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 |
There was a problem hiding this comment.
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
.
There was a problem hiding this comment.
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 |
There was a problem hiding this comment.
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?
There was a problem hiding this comment.
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 |
There was a problem hiding this comment.
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.
There was a problem hiding this comment.
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, |
There was a problem hiding this comment.
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.
There was a problem hiding this comment.
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. |
There was a problem hiding this comment.
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".
There was a problem hiding this comment.
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) |
There was a problem hiding this comment.
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.
There was a problem hiding this comment.
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; |
There was a problem hiding this comment.
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.
There was a problem hiding this comment.
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. |
There was a problem hiding this comment.
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.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
fixed. Thanks.
✅ Validation status: passed
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. |
* 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
Fixes #961.
Describe the new features in the C# language.