About the Author |
|
xi | |
About the Technical Reviewer |
|
xiii | |
Acknowledgments |
|
xv | |
Introduction |
|
xvii | |
|
|
1 | (54) |
|
Getting Started with Tuples |
|
|
2 | (12) |
|
Changing the Default Positional Names for Tuple Values |
|
|
4 | (1) |
|
Create Local Tuple Variables in the Return Data |
|
|
5 | (1) |
|
Tuple Members as Discrete Variables |
|
|
6 | (2) |
|
Instances of Tuple Variables |
|
|
8 | (3) |
|
Inferring Tuple Element Names |
|
|
11 | (1) |
|
The Ways to Deconstruct Tuples |
|
|
12 | (2) |
|
|
14 | (1) |
|
|
14 | (14) |
|
Using the Is Type Pattern Expression |
|
|
20 | (2) |
|
Using Switch Pattern Matching Statements |
|
|
22 | (1) |
|
Using When Clauses in Case Expressions |
|
|
23 | (4) |
|
Checking for Nulls in Switch Statements |
|
|
27 | (1) |
|
|
28 | (3) |
|
|
30 | (1) |
|
|
31 | (5) |
|
Generalized Async Return Types |
|
|
36 | (8) |
|
So Why Should I Ever Want to Use Task<T>? |
|
|
44 | (1) |
|
|
44 | (3) |
|
|
47 | (6) |
|
|
47 | (2) |
|
|
49 | (1) |
|
|
50 | (1) |
|
|
51 | (2) |
|
|
53 | (2) |
|
|
55 | (50) |
|
|
55 | (3) |
|
Using and Implementing Abstract Classes |
|
|
58 | (6) |
|
|
58 | (1) |
|
|
59 | (1) |
|
|
59 | (1) |
|
|
60 | (3) |
|
When Do I Use an Abstract Class? |
|
|
63 | (1) |
|
Using and Implementing Interfaces |
|
|
64 | (7) |
|
Creating the Abstract and Derived Classes |
|
|
65 | (2) |
|
|
67 | (1) |
|
Implementing the Interfaces |
|
|
68 | (3) |
|
Asynchronous Programming Using Async and Await |
|
|
71 | (9) |
|
How Do I Write Async Methods? |
|
|
71 | (3) |
|
|
74 | (5) |
|
|
79 | (1) |
|
Making Use of Extension Methods |
|
|
80 | (5) |
|
Checking If a String Is a Valid Integer |
|
|
81 | (2) |
|
Extension Methods Are Lower Priority Than Instance Methods |
|
|
83 | (2) |
|
|
85 | (12) |
|
Non-generic VehicleCarrier Class |
|
|
86 | (3) |
|
Changing VehicleCarrier Class to Be Generic |
|
|
89 | (3) |
|
Recap and More on Generics |
|
|
92 | (1) |
|
|
92 | (2) |
|
|
94 | (3) |
|
|
97 | (5) |
|
Some Characteristics of Nullable Types |
|
|
97 | (1) |
|
|
98 | (1) |
|
A Peek Inside Nullable<T> |
|
|
99 | (3) |
|
|
102 | (2) |
|
|
104 | (1) |
|
Chapter 3 The New Features of C# 8.0 |
|
|
105 | (20) |
|
|
106 | (5) |
|
Enabling Nullable Reference Types |
|
|
107 | (3) |
|
|
110 | (1) |
|
|
111 | (2) |
|
|
113 | (3) |
|
|
116 | (4) |
|
Should I Use Switch Expressions? |
|
|
118 | (1) |
|
|
119 | (1) |
|
Target-Typed New Expressions |
|
|
120 | (1) |
|
|
121 | (2) |
|
|
123 | (1) |
|
|
124 | (1) |
|
Chapter 4 Responsive Web Applications Using ASP.NET MVC |
|
|
125 | (64) |
|
Creating Your ASP.NET MVC Application |
|
|
126 | (6) |
|
Referencing jQuery and Bootstrap |
|
|
132 | (5) |
|
|
135 | (1) |
|
Referencing Bundles in Views |
|
|
136 | (1) |
|
Setting Up and Using SCSS |
|
|
137 | (8) |
|
|
142 | (2) |
|
Adding Our Custom CSS File to BundleConfig |
|
|
144 | (1) |
|
Creating Models, Controllers, Views and Using Razor |
|
|
145 | (21) |
|
|
145 | (1) |
|
|
146 | (1) |
|
|
146 | (1) |
|
|
146 | (1) |
|
|
147 | (2) |
|
|
149 | (3) |
|
|
152 | (2) |
|
|
154 | (3) |
|
|
157 | (1) |
|
|
158 | (1) |
|
Linking Everything Together |
|
|
159 | (3) |
|
|
162 | (2) |
|
|
164 | (2) |
|
|
166 | (1) |
|
|
166 | (9) |
|
|
166 | (4) |
|
|
170 | (5) |
|
Testing Your Responsive Layout Using Chrome |
|
|
175 | (4) |
|
Starting with the Developer Tools |
|
|
175 | (1) |
|
Breakpoints and Media Queries Using SCSS |
|
|
176 | (3) |
|
Debugging Your jQuery Using Chrome Developer Tools |
|
|
179 | (9) |
|
|
188 | (1) |
|
Chapter 5 Getting Started with NET Core 3.0 |
|
|
189 | (32) |
|
Creating NET Core Apps in Visual Studio 2019 |
|
|
190 | (3) |
|
What Is New in NET Core 3.0 |
|
|
193 | (11) |
|
|
193 | (5) |
|
|
198 | (1) |
|
|
199 | (2) |
|
Fast Built-In JSON Support |
|
|
201 | (1) |
|
|
202 | (2) |
|
Installing .NET Core 3.0 Preview on Linux with Snap |
|
|
204 | (1) |
|
Create and Run an ASP.NET MVC App on Linux |
|
|
205 | (3) |
|
Edit Your ASP.NET Core MVC App on Linux with Visual Studio Code |
|
|
208 | (4) |
|
|
209 | (3) |
|
Debug YourASP.NET Core MVC Project with Visual Studio Code |
|
|
212 | (7) |
|
|
219 | (2) |
|
Chapter 6 Being More Productive in Visual Studio |
|
|
221 | (62) |
|
New Features in Visual Studio 2019 |
|
|
222 | (11) |
|
|
222 | (3) |
|
|
225 | (2) |
|
|
227 | (3) |
|
|
230 | (1) |
|
Per-Monitor Aware Rendering |
|
|
231 | (1) |
|
Free/Paid/Trial Extensions |
|
|
232 | (1) |
|
|
233 | (16) |
|
|
234 | (7) |
|
When You Are Having Trouble Signing In |
|
|
241 | (3) |
|
|
244 | (4) |
|
|
248 | (1) |
|
Refactorings and Code Fixes |
|
|
249 | (8) |
|
Convert foreach to LINQ (VS2019 Only) |
|
|
249 | (4) |
|
Convert to Interpolated String |
|
|
253 | (1) |
|
Convert Anonymous Type to Class |
|
|
253 | (3) |
|
Converting a Local Function to Method |
|
|
256 | (1) |
|
Enable JavaScript Debugging in ASP.NET Projects |
|
|
257 | (5) |
|
Exporting Your Editor Settings |
|
|
262 | (3) |
|
Visual Studio IntelliCode Using AI |
|
|
265 | (6) |
|
General Visual Studio Tips |
|
|
271 | (10) |
|
|
272 | (5) |
|
Generate Classes from XML and JSON |
|
|
277 | (2) |
|
|
279 | (2) |
|
|
281 | (2) |
Index |
|
283 | |