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

Update "How to: Modify string" #4519

Merged
merged 10 commits into from
Mar 9, 2018
Merged

Update "How to: Modify string" #4519

merged 10 commits into from
Mar 9, 2018

Conversation

BillWagner
Copy link
Member

@BillWagner BillWagner commented Feb 28, 2018

The following updates are part of this PR:

  1. Update the samples to use modern C#.
  2. Add all sample code to a single downloadable project.
  3. Leverage the C# interactive REPL
  4. Highlight the immutability of strings in every example.

internal review link

@BillWagner BillWagner changed the title [WIP] Update "How to: Modify string" Update "How to: Modify string" Mar 2, 2018
@BillWagner BillWagner requested a review from mairaw March 2, 2018 16:03
},
{
"source_path": "docs/csharp/programming-guide/strings/how-to-modify-string-contents.md",
"redirect_url": "/dotnet/standard/base-types/modify-string-contents"
Copy link
Contributor

Choose a reason for hiding this comment

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

redirect_url should be /dotnet/csharp/how-to/modify-string-contents?


# How to: Modify String Contents (C# Programming Guide)

You can't modify the contents of a string after it has been created. The <xref:System.String?displayProperty=nameWithType> class is *immutable*. The examples in this article show how to create a new string object that represents the result of some change to an existing string.
Copy link
Contributor

@pkulikov pkulikov Mar 2, 2018

Choose a reason for hiding this comment

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

But the last section of this article shows how to modify string-in-place, so the first sentence doesn't sound convincing. I don't know how to say that not unsafe strings are immutable, which means that any string modification creates a new string rather than updating the given string. What if we talk not about modifying strings, but transforming (but then too much changes through docs...)?

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 did make a few updates here based on your comment.

First, I added "typically" to the first sentence. I tried introducing the term "unsafe code" there, but I rejected it because the article is not really about using unsafe code, but about how to change the value of strings.

I want to continue to use the term "Modifying strings" because that is a more common search term than "transforming". I agree it is a bit inaccurate, and the content of the article works to make that clear.

Next, I added a bit more explanatory text in the paragraph that introduces the unsafe sample.

I hope that adds the clarity we need.


## Trim whitespace

You can use the <xref:System.String.Trim%2A?displayProperty=nameWithType>, <xref:System.String.TrimStart%2A?displayProperty=nameWithType>, and <xref:System.String.TrimEnd%2A?displayProperty=nameWithType> methods removes any leading or trailing whitespace. The following code shows an example of each. The source string does not change; these methods return a new string with the modified contents.
Copy link
Contributor

@pkulikov pkulikov Mar 2, 2018

Choose a reason for hiding this comment

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

After the method list should be ...methods to remove...


The following example is provided for those rare situations where you want to modify a string in-place by using unsafe code. The example shows how to access the individual characters "in-place" by using the fixed keyword. It also demonstrates one possible side effect of unsafe operations on strings that results from the way that the C# compiler stores (interns) strings internally. In general, you shouldn't use this technique unless it is absolutely necessary.

[!code-csharp-interactive[unsafe ways to create a new string](../../../samples/snippets/csharp/how-to/strings/ModifyStrings.cs#7)]
Copy link
Contributor

Choose a reason for hiding this comment

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

Like in other How-Tos on strings, let's insert paragraph about where to find the code used in snippets. Then zip-file should be updated?

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 for the reminder. I wanted to wait until we'd merged the How to search strings PR.

@@ -118,7 +118,7 @@ string s = String.Empty;

|Topic|Description|
|-----------|-----------------|
|[How to: Modify String Contents](../../../csharp/programming-guide/strings/how-to-modify-string-contents.md)|Provides a code example that illustrates how to modify the contents of strings.|
|[How to: Modify String Contents](../../how-to/modify-string-contents.md)|Provides a code example that illustrates how to modify the contents of strings.|
Copy link
Contributor

Choose a reason for hiding this comment

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

Instead of Provides a code example... it better sounds like in a row below on concatenation: Illustrates... Not for this PR: description of How to: Parse Strings... also might be updated.
Though, description of concatenation is not correct too: string methods are also used for concatenation. I'd review that table as a whole.

System.Text.RegularExpressions.RegexOptions.IgnoreCase);
Console.WriteLine(source);

string localReplaceMatchCase(System.Text.RegularExpressions.Match matchExpression)
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 local methods start with capital letter as well?
Anyway, a good example of local method usage.

Copy link
Contributor

@rpetrusha rpetrusha left a comment

Choose a reason for hiding this comment

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

I've left a number of comments, @BillWagner. The REPL really makes a difference here, and the pointer example is simple and extremely effective.


# How to: Modify String Contents (C# Programming Guide)

You can't easily modify the contents of a string after it has been created. The <xref:System.String?displayProperty=nameWithType> class is *immutable*. The examples in this article show how to create a new string object that represents the result of some change to an existing string.
Copy link
Contributor

Choose a reason for hiding this comment

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

This doesn't seem like a good starting point or good phrasing, especially if this is intended as an introductory topic. It sort of reads, "Title: How to modify strings; Answer: You can't". (Actually, you can't easily is completely incorrect.) In some sense immutablity is an implementation detail. (The primitives, for example, are also immutable, though they appear not to be.) Operationally, this simply means you have to assign the changed string to a new string or nothing is changed (a common error with some string methods), which is where I would start with the explanation. I'd only mention that this is immutable afterwards.

Copy link
Member Author

@BillWagner BillWagner Mar 7, 2018

Choose a reason for hiding this comment

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

This was a great suggestion that helped drive the tone better. Thanks! I re-wrote the opening and moved the discussion of immutable to the last section.


[!code-csharp-interactive[replace creates a new string](../../../samples/snippets/csharp/how-to/strings/ModifyStrings.cs#1)]

You can see in the preceding example that the original string, `source`, is not modified. The <xref:System.String.Replace%2A?displayProperty=nameWithType> creates a new `string` containing the modifications.
Copy link
Contributor

Choose a reason for hiding this comment

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

creates --> method creates (or else delete "The" at the beginning of the sentence)


The <xref:System.String.Replace%2A> method can replace either strings or single characters. In both cases, every occurrence of the sought text is replaced. The following example replaces all ' ' characters with '_':

[!code-csharp-interactive[replace characters](../../../samples/snippets/csharp/how-to/strings/ModifyStrings.cs#2)]
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 it might be useful to include output at the end of each example even if it's runnable, for those who don't want to run it.

Copy link
Contributor

Choose a reason for hiding this comment

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

I advocate not to include output as it makes code snippets take more space (my comment as a reader) and harder to maintain (as a contributor). One more thing: when I run and change code, output comment becomes wrong and just takes space between code and actual output (my comment as a user).

Copy link
Member Author

@BillWagner BillWagner Mar 7, 2018

Choose a reason for hiding this comment

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

😆 This mirrors the split feedback I've gotten when I've shown pages at conferences. I created #4571 to see which people like. Let's see what responses we get. For now, I left the comments in place here.


The source string is unchanged, and a new string is returned with the replacement.

## Trim whitespace
Copy link
Contributor

Choose a reason for hiding this comment

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

white space as a noun should be 2 words ("white space")


## Replace patterns

You can use [regular expressions](../../standard/base-types/regular-expressions.md) to replace patterns with new patterns. The following example makes use of the <xref:System.Text.RegularExpressions.Regex?displayProperty=nameWithType> class to find a pattern in a source string and replace it with proper capitalization. The <xref:System.Text.RegularExpressions.Regex.Replace%2A?displayProperty=nameWithType> method takes a function that provides the logic of the replacement as one of its arguments. That function uses the <xref:System.Text.StringBuilder?displayProperty=nameWithType> class to build the replacement string with proper capitalization.
Copy link
Contributor

Choose a reason for hiding this comment

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

you don't replace patterns with patterns; you identify text that conforms to a pattern, which you replace with text that is defined by a pattern.
makes use of --> uses
<xref:System.Text.RegularExpressions.Regex.Replace%2A?displayProperty=nameWithType> should be a link to the overload used or make it clear that this is a subset of replace methods, since not all have a MatchEvaluator argument.
Mention the name of the function that provides the logic of the replacement -- LocalReplaceMatchCase -- to make it clear that it's your function, and not Regex.Replace, that provides the StringBuilder functionality. In terms of the code, since you're using a local function, I think I'd be inclined to include the entire source, or at least all of the Main method, for anyone who might not be aware of local functions.

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 updated everything in this comment, except expanding the sample to include the example method. If I did that, it doesn't run in the REPL.


You can use [regular expressions](../../standard/base-types/regular-expressions.md) to replace patterns with new patterns. The following example makes use of the <xref:System.Text.RegularExpressions.Regex?displayProperty=nameWithType> class to find a pattern in a source string and replace it with proper capitalization. The <xref:System.Text.RegularExpressions.Regex.Replace%2A?displayProperty=nameWithType> method takes a function that provides the logic of the replacement as one of its arguments. That function uses the <xref:System.Text.StringBuilder?displayProperty=nameWithType> class to build the replacement string with proper capitalization.

The search pattern, "the\s" searches for the word "the" followed by a whitespace character. That part of the pattern ensures that it doesn't match "there" in the source string. Regular expressions are most useful for searching and replacing text that follows a pattern, rather than known text. See [How to: search strings](search-strings.md) for more details.
Copy link
Contributor

Choose a reason for hiding this comment

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

whitespace --> white-space
the sentence "Regular expressions are most useful..." should go earlier. You might also link to the regular expression replacement language elements -- people have a lot of difficulty with the regex replace method.

## Unsafe modifications to string

Using **unsafe** code, you can modify a string "in place" after it has been created. Unsafe code bypasses many of the features of .NET designed to minimize certain types of bugs in code.
The following example is provided for those rare situations where you want to modify a string in-place using unsafe code. The example shows how to access the individual characters "in-place" by using the fixed keyword. It also demonstrates one possible side effect of unsafe operations on strings that results from the way that the C# compiler stores (interns) strings internally. In general, you shouldn't use this technique unless it is absolutely necessary.
Copy link
Contributor

Choose a reason for hiding this comment

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

I'd be somewhat more precise here. Fixed doesn't permit access, it just prevents GC from moving the object you might want to access.


## Unsafe modifications to string

Using **unsafe** code, you can modify a string "in place" after it has been created. Unsafe code bypasses many of the features of .NET designed to minimize certain types of bugs in code.
Copy link
Contributor

Choose a reason for hiding this comment

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

Links to unsafe, fixed, etc., would also be good here.

Copy link
Contributor

Choose a reason for hiding this comment

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

What about the link to how strings are stored (intern)? Or that would be too many implementation details?

Copy link
Member Author

Choose a reason for hiding this comment

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

Added links for fixed and unsafe. I didn't find a good topic on interned strings though.

Using **unsafe** code, you can modify a string "in place" after it has been created. Unsafe code bypasses many of the features of .NET designed to minimize certain types of bugs in code.
The following example is provided for those rare situations where you want to modify a string in-place using unsafe code. The example shows how to access the individual characters "in-place" by using the fixed keyword. It also demonstrates one possible side effect of unsafe operations on strings that results from the way that the C# compiler stores (interns) strings internally. In general, you shouldn't use this technique unless it is absolutely necessary.

[!code-csharp-interactive[unsafe ways to create a new string](../../../samples/snippets/csharp/how-to/strings/ModifyStrings.cs#7)]
Copy link
Contributor

Choose a reason for hiding this comment

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

Nice example!

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 was already there. Was it originally yours? 👏

Copy link
Contributor

@rpetrusha rpetrusha left a comment

Choose a reason for hiding this comment

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

I've left a number of minor comments, @BillWagner, but this looks really good overall. You can merge once you decide which ones you want to address.


# How to: Modify String Contents (C# Programming Guide)

This article demonstrates several techniques to produce a `string` by modifying an existing `string`. All the techniques demonstrated return the result of the modifications as a `string` object. To clearly demonstrate this, the examples all store the result in a new variable. You can then examine both the original `string` and the `string` resulting from the modification when you run each example.
Copy link
Contributor

Choose a reason for hiding this comment

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

This is a much better opening paragraph, Bill! I'd modify the second sentence just a bit to stress that a new string is returned -- "as a new `string` object."


This article demonstrates several techniques to produce a `string` by modifying an existing `string`. All the techniques demonstrated return the result of the modifications as a `string` object. To clearly demonstrate this, the examples all store the result in a new variable. You can then examine both the original `string` and the `string` resulting from the modification when you run each example.

There are several techniques demonstrated in this article. You can replace existing text. Other methods search for patterns and replace matching text with other text. You can also treat a string as a sequence of characters. You can also use convenience methods that remove whitespace. YOu should choose the techniques that most closely matches your scenario.
Copy link
Contributor

Choose a reason for hiding this comment

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

Rather than "Other methods", "You" to maintain parallelism
No "also" in "You can also treat"
whitespace --> white space (2 words)
YOu has a typo --> You
matches ---> match


## Replace text

The following code demonstrates this *immutable* property of strings. It creates a new string by replacing existing text with a substitute.
Copy link
Contributor

Choose a reason for hiding this comment

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

I'd move this first sentence to after the code example.

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 does flow much better.


[!code-csharp-interactive[replace characters](../../../samples/snippets/csharp/how-to/strings/ModifyStrings.cs#2)]

The source string is unchanged, and a new string is returned with the replacement.
Copy link
Contributor

Choose a reason for hiding this comment

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

I'm not sure why everything from the code label on is italicized. Is '_' interpreted as *?

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's the _. The italics does not show up on the review site.


## Trim white space

You can use the <xref:System.String.Trim%2A?displayProperty=nameWithType>, <xref:System.String.TrimStart%2A?displayProperty=nameWithType>, and <xref:System.String.TrimEnd%2A?displayProperty=nameWithType> methods to remove any leading or trailing whitespace. The following code shows an example of each. The source string does not change; these methods return a new string with the modified contents.
Copy link
Contributor

Choose a reason for hiding this comment

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

whitespace --> white space

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 did a global search for whitespace.


## Replace matching patterns

You can use [regular expressions](../../standard/base-types/regular-expressions.md) to replace text matching patterns with new text, possibly defined by a pattern. The following example uses the <xref:System.Text.RegularExpressions.Regex?displayProperty=nameWithType> class to find a pattern in a source string and replace it with proper capitalization. The <xref:System.Text.RegularExpressions.Regex.Replace(System.String,System.String,System.Text.RegularExpressions.MatchEvaluator,System.Text.RegularExpressions.RegexOptions)?displayProperty=nameWithType> method takes a function that provides the logic of the replacement as one of its arguments. In this example, that function, `LocalReplaceMatchCase` is a **local function**, declared inside the sample method. `LocalReplaceMatchCase` uses the <xref:System.Text.StringBuilder?displayProperty=nameWithType> class to build the replacement string with proper capitalization.
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 after "local function"


You can produce a character array from a string, modify the contents of the array, and then create a new string from the modified contents of the array.

The following example shows how to replace a set of characters in a string. First, it uses the <xref:System.String.ToCharArray?displayProperty=nameWithName> method to create an array of characters. Then, it uses the <xref:System.String.IndexOf%2A> method to find the starting index of the word "fox." Then, the next three characters are replaced with a different word. Finally, a new string is constructed from the updated character array.
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 after the two occurrences of "Then"

## Unsafe modifications to string

Using **unsafe** code, you can modify a string "in place" after it has been created. Unsafe code bypasses many of the features of .NET designed to minimize certain types of bugs in code. You need to use unsafe code to modify a string in place because the string class is designed as an **immutable** type. Once it has been created, its value does not change. Unsafe code circumvents this property by accessing and modifying the memory used by a `string` without using normal `string` methods.
The following example is provided for those rare situations where you want to modify a string in-place using unsafe code. The example shows how to use the `fixed` keyword. The `fixed` keyword prevents the garbage collector (GC) from moving the string object in memory while code accesses the memory using the unsafe pointer. It also demonstrates one possible side effect of unsafe operations on strings that results from the way that the C# compiler stores (interns) strings internally. In general, you shouldn't use this technique unless it is absolutely necessary. You can learn more in the articles on [unsafe](../langauge-reference/keywords/unsafe.md) and [fixed](../language-reference/keywords/fixed.md).
Copy link
Contributor

Choose a reason for hiding this comment

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

It might be useful to link to some information on interning strings: ([interns](<xref:System.String.Intern%2A>))

Copy link
Member Author

Choose a reason for hiding this comment

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

Good suggestion. I looked and could not find a good topi in our conceptual docs.

@BillWagner BillWagner merged commit 9de0734 into dotnet:master Mar 9, 2018
@BillWagner BillWagner deleted the update-modify-strings branch March 9, 2018 21:20
@BillWagner BillWagner mentioned this pull request Mar 13, 2018
6 tasks
luyajun0205 pushed a commit to OPS-E2E-Prod/docs that referenced this pull request Mar 19, 2018
* Fixes and improvements to Semantic analysis Get started (dotnet#4575)

* Order the definitions to match the order of terms (dotnet#4576)

The introductory sentence could be read as implying
definitions that contradict the body of the article.

* Fix invalid Windows file system paths (dotnet#4559)

* Fix invalid Windows file system paths

* Add escape characters

* Fixing capitalization of Visual Basic (dotnet#4578)

Changed "Visual basic" to "Visual Basic" for the description of the Get Visual Basic link.

* Fixed broken links in interop docs (dotnet#4573)

* Fixed broken links in interop docs

* Updated additional links

* Removed 'en-us' from URLs

* Fixing broken link to MVA course (dotnet#4580)

Visual Basic Fundamentals for Absolute Beginners link was directing to a list of courses, not really related to VB.  I've updated the link directly to the course.  I did check to see if the course was in other languages before putting in the en-US link - looks like it's available only in English.

* Minor refactoring (dotnet#4582)

Change "new ValidationResult(true, null)" to "ValidationResult.ValidResult", since it looks a little cleaner and the property was explicitly designed for that use.

* Fixed link (dotnet#4583)

* Update "How to: Modify string" (dotnet#4519)

* article and code moved

* interim checkin

Switching tasks.

* checkin to run test build

I want to see if I can use local functions in C# interactive.

* finish samples and new draft

Ready for my first review.

* fix build errors

* proofread

* update per feedback.

* respond to feedback.

* additional feedback.

* respond to feedback.

* Fix escape characters in HttpListener Remarks section (dotnet#4495)

* Minor refactoring (dotnet#4584)

Change "New ValidationResult(True, Nothing)" to "ValidationResult.ValidResult", since it looks a little cleaner and the property was explicitly designed for that use.

* fix title (dotnet#4590)

* fix broken links (dotnet#4588)

* Add the closing token for an XML include (dotnet#4593)

Without this, the rest of the file renders incorrectly.

* Correct description of ROOT parameter (dotnet#4595)

* Update tuples.md "Interoperation with C# Tuples" content (dotnet#4581)

*  Removed an excessive "and" 
*  Removed some text that didn't seem overly clear.

* Replaced link to UserVoice (dotnet#4594)

* Removed link to UserVoice

* Changed URL target

* Fix typo (dotnet#4599)

* Experiment: CodeOwners (dotnet#4597)

* Experiment: CodeOwners

Trying an experiment to see how we might use use the CODEOWNERS file to get reviews routed to the right person.

* Added several sections

* Update CODEOWNERS

* Fixing anchor link to the "private protected access modifier" section (dotnet#4601)

* fixes to the CODEOWNERS (dotnet#4602)

* fixes to the CODEOWNERS

The changes here:
1. The '@' is needed on each user name.
1. The C# Snippets was missing the 'csharp' directory component.
1. Order is important.

* Add F# guide.

* modify-string-contents.md: added interactive note (dotnet#4607)

* Fix markdown table (dotnet#4603)

Fix usage of `|` in markdown (use `&#124;` instead)

* Update infrastructure-persistence-layer-implemenation-entity-framework-core.md (dotnet#4610)

Update link to the new address to avoid an extra 301 redirect.

* csharp-interactive-note.md: style update (dotnet#4606)

* parallel-diagnostic-tools.md: removed Visual Studio version (dotnet#4608)

* adding missing language identifiers (dotnet#4611)

* adding missing language identifiers (dotnet#4612)

* adding missing language identifiers (dotnet#4613)

* adding missing language identifiers (dotnet#4614)

* adding missing language identifiers (dotnet#4615)

* adding missing language identifiers (dotnet#4616)

* adding missing language identifiers (dotnet#4617)

* adding missing language identifiers (dotnet#4618)

* adding missing language identifiers (dotnet#4619)

* adding missing language identifiers (dotnet#4620)

* adding missing language identifiers (dotnet#4621)

* adding missing language identifiers (dotnet#4622)

* adding missing language identifiers (dotnet#4623)

* Fixed some attribute names (dotnet#4629)

.NET puts the "Attribute" suffix in all its attribute *classes*, but not in the actual attribute.

* Fix "whitespace" words - docs/standard (dotnet#4605)

* base-types

* fixes by pr rpetrusha

* System.Reflection docs for ProcessorArchitecture is misleading (dotnet#4539)

* clarify the difference betwen IA64 and AMD64

* Update ProcessorArchitecture.xml

* Changed 'integer' to 'integral value' for consistency (dotnet#4586)

* 👓 sweep docset for areas where `in` wasn't mentioned but should be (dotnet#4534)

* sweep docset for areas where `in` wasn't mentioned but should be

* respond to first round of feedback

* create in-modifer article

Also, update samples and snippets and make corresponding changs to 'ref' and 'out' article.

* fix build errors

* fix one more build error

* wording change based on feedback.

* respond to edits

* commit changes from that unsaved window

Yeah, I did that. Didn't save before committing.

* added missing options (dotnet#3390)

* Add warning regarding server host configuration (dotnet#4634)

* Fix some xrefs (dotnet#4624)

* Fix some xrefs

* Fixed typo

* Change hybrid xref links to normal xrefs

* Remove redundant text with bad link

* Update compiler-api-model.md (dotnet#4636)

fix small typos

* Corrected description of verbatim attribute usage (dotnet#4635)

* removed sentence about migrating content (dotnet#4532)

* removed sentence about migrating content

* removed preview

* Update the F# Guide page and some ms.date links (dotnet#4521)

* Update to F# docs round 1

* yup

* fix

* feedback

* Fix link

* feedback

* Updates

* Updates

* Updates

* Make comments betteR

* Feedback

* Feedback

* fixes

* Improvements to Creating a Type Provider (dotnet#4592)

* Improvements to Creating a Type Provider

* Fixed assembly attribute

* Revision of DateTime.Parse overloads (dotnet#4455)

* Revision of DateTime.Parse

* Additional modifications

* Some further revisions

* Additional revisions

* Corrected bad XML tags

* Moved examples

* Additional revisions and .zip files

* Added accidentally deleted file

* Addressed review comments

* keywords/string.md: link verbatim identifier page (dotnet#4639)

* C13890: Show code for link in target versions (dotnet#4641)

Hello, @BillWagner, 

Localization team has reported source content issue that causes localized version to have broken format compared to en-us version.  

Please, help to check my proposed file change into the article and help to merge if you agree with fix. If not, please, let me know either if you would like me to fix it in another way within this PR, if you prefer to fix it in another PR or if I should close this PR as by-design. In case of using another PR, please, let me know of your PR number, so we can confirm and close this PR. 

Many thanks in advance.

* C13891: Show code for link in target versions (dotnet#4642)

* Fix incorrect en dashes (dotnet#4644)

* replace BNF grammar with ANTL grammar (dotnet#4643)

* replace BNF grammar with ANTL grammar

The BNF grammar rendering was quite messy. Antlr provides a much more clear rendering on the current engine.

* fix typo and update metadata

* Added output comment to verbatim string code snippet (dotnet#4646)

* added missing entry (dotnet#4648)

* simplify template (dotnet#4645)

* simplify template

* feedback

* Fixed broken links to archived interop topics (dotnet#4647)

* Changed HSB to HSL color model (dotnet#4652)

* Changed HSB to HSL color model

* Addressed review comments

* Fix connect bug DevDiv # 93543 (dotnet#4653)

* fix broken link (dotnet#4655)

* Add displayProperty attribute to address customer complaint in SqlParameter.Value docs (dotnet#4660)

* Fix connect bug DevDiv # 93543

* Add clarifications to links to address DevDiv Connect Bug # 104024

* add one more displayproperty

* including the template in the treeview (dotnet#4662)

Adding reference the hierarchical template in the treeview

* Replace IIF with IF (dotnet#4665)

* Added GetHashCode() implementation to ValueObject (dotnet#4185)

This will be very helpful to readers. Picked it up from eShopOnContainers repo.

* Provided correct enum members, method overloads (dotnet#4484)

* Provided correct enum members, method overloads

* Incorporated review comments, corrected other errors

* Fixed 2 broken links

* Fixed two additional links

* Added exception information to SingleOrDefault (dotnet#4650)

* Added information on string length >= desired string length (dotnet#4651)

* Added information on string length >= desire string length

* fixed broken link

* Incorporated comments from @svick

* TLS best practices (dotnet#4658)

* IIF to IF on Tuples page (dotnet#4669)

* fix: derrived --> derived typo (dotnet#4673)

* Modified contributors guide to reflect contributors' project (dotnet#4666)

* Add link to github issue to TLS doc (dotnet#4676)

* fix link (dotnet#4672)

* fix typo (dotnet#4678)

* Remove extra backslash (dotnet#4680)

* Fix markdown link (dotnet#4679)

* Fix markdown link

* feedback

* update signalr info for 2.1 preview (dotnet#4681)

* Fix typo (dotnet#4683)

* fixed typo

* fix typo

* add PDF to preview serverless e-book (dotnet#4685)

* Removed spaces in code (dotnet#4671)

* Fixed typo in --x operator description (dotnet#4691)

* Add syntax highlighting to inline code in stackalloc (dotnet#4690)

Just noticed on docs.microsoft.com that these code blocks don't have syntax highlighting, which does not adhere to the style guide

* Add UWP as platform that supports .NET Standard (dotnet#3813)

* Add UWP as platform that supports .NET Standard

https://blogs.msdn.microsoft.com/dotnet/2017/10/10/announcing-uwp-support-for-net-standard-2-0/

* Add platforms; remove versions; add link

Instead of listing the same platforms that are listed on https://docs.microsoft.com/en-us/dotnet/standard/net-standard#net-implementation-support and having to maintain both lists as new versions are released, just mention the platforms here and link to the existing table with versions.

Closes dotnet#3814

* feedback

* < and > wrong (dotnet#4664)

* < and > wrong

< and > were not in code

* Updated xref

Updated xref to correct signature

* removing tickmarks and overloads

* some other minor fixes

* Update net-standard.md (dotnet#4694)

* Correct time complexity of List<T>.InsertRange (dotnet#4693)

*  Operator new doesn't create structs on the stack  (dotnet#4667)

* Operator new doesn't create structs on the stack

* Small improvements to operator new

* Structs can contain resources too

* Mention garbage collector

* Clarified when value types are destroyed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants