I am freshening up on C#. I copied C# guide index from https://docs.microsoft.com/en-us/dotnet/csharp/ and in the process of linking to videos to help me review. Below I share work in process.
-
C# documentation Get started Introduction Types
-
Program building blocks Major language areas Tutorials
- Choose your first lesson Browser based
tutorials Hello world - Numbers in C# Branches and loops List collections
- Work in your local environment Set up your
environment Numbers in C# - Branches and loops List collections
- Choose your first lesson Browser based
-
Fundamentals Program structure
Overview-
Main method
https://www.youtube.com/watch?v=5Xd1x0Iivdk&t=143s (OKAY)
https://www.youtube.com/watch?v=xOuI0n0O324 (BAD)
https://www.youtube.com/watch?v=hiQcIgLAJnk (BAD) -
Top-level statements Type system Overview
Namespaces
https://www.youtube.com/watch?v=yZGSOafui44&t=149s (BAD) -
Classes Records Interfaces
https://www.youtube.com/watch?v=9Byvwa9yF-I (GOOD) -
Generics
https://www.youtube.com/watch?v=l6s7AvZx5j8&t=352s (GOOD; LONG)
https://www.youtube.com/watch?v=7VlykMssZzk&t=88s (GOOD)
https://www.youtube.com/watch?v=ZrjCG0Fu5Ew -
Anonymous Types
https://www.youtube.com/watch?v=u8C9iO_4yIQ&t=21s
https://www.youtube.com/watch?v=q1AUv47Eq28
https://www.youtube.com/watch?v=bT1MRNwI5xw
-
-
Object Oriented programming Overview
- Objects Inheritance Polymorphism
https://www.youtube.com/watch?v=CClziU97Xeg&t=28s
https://www.youtube.com/watch?v=ZzVxgJmLAsE&t=60s
- Objects Inheritance Polymorphism
-
Functional techniques Pattern matching Discards
- Deconstructing tuples and other types Exceptions
and errors
https://www.youtube.com/watch?v=x3At5Pq2__I&t=46s (long; high quality) - Overview
https://www.youtube.com/watch?v=uyMoRcgI9qQ
https://www.youtube.com/watch?v=9lvx6mzCAE4 - Using exceptions Exception handling
- Creating and throwing exceptions Compiler-generated exceptions Coding style
- Identifier names
- C# coding conventions Tutorials
- How to display command-line arguments Introduction to classes
- Object-Oriented C# Inheritance in C# and .NET Converting types
- Build data-driven algorithms with pattern matching How to handle an exception
using try-catch - How to execute cleanup code using finally
What's new in C#
- Deconstructing tuples and other types Exceptions
-
C# 0. 7. C# 0. >
-
C# 0.- 3. 9. Compiler breaking changes C# Version History Relationships to
.NET library Version compatibility Tutorials- Explore record types Explore top level statements
Explore patterns in objects - Safely update interfaces with default
interface methods Create mixin functionality with default interface methods Explore
indexes and ranges - Work with nullable reference types Upgrade
an app to nullable reference types - Generate and consume asynchronous
streams Tutorials
- Explore record types Explore top level statements
-
Explore string interpolation - interactive
-
Explore string interpolation - in your environment Advanced scenarios
for string Interpolation Console Application -
REST Client Work with LINQ Use Attributes
-
C# concepts
-
Nullable reference types
-
Choose a strategy for enabling nullable
reference types Methods -
Properties Indexers Iterators
-
Delegates & events Introduction to Delegates
- System.Delegate and the delegate keyword
- Strongly Typed Delegates Common Patterns
for Delegates Introduction to events - Standard .NET event patterns The Updated
.NET Event Pattern - Distinguishing Delegates and Events Language-Integrated Query (LINQ) Overview of LINQ
- Query expression basics LINQ in C#
- Write LINQ queries in C# Query a
collection of objects Return a query from a method - Store the results of a query in memory Group
query results - Create a nested group
- Perform a subquery on a grouping operation
Group results by contiguous keys - Dynamically specify predicate filters
at runtime Perform inner joins - Perform grouped joins Perform left outer
joins - Order the results of a join clause Join
by using composite keys Perform custom join operations - Handle null values in query expressions
Handle exceptions in query expressions Write safe, efficient code
-
Expression trees
- Introduction to expression trees Expression
Trees Explained - Framework Types Supporting Expression Trees
- Executing Expressions Interpreting Expressions
Building Expressions Translating Expressions Summary
- Introduction to expression trees Expression
-
Native interoperability Documenting your
code Versioning -
How-to C# articles Article index
-
Split strings into substrings Concatenate strings Search strings
-
Modify string contents Compare strings
-
How to catch a non-CLS exception
-
The .NET Compiler Platform SDK (Roslyn APIs)
-
The .NET Compiler Platform SDK (Roslyn APIs) overview Understand the compiler API model
-
Work with syntax Work with semantics
-
Work with a workspace
-
Explore code with the syntax visualizer
Quick starts- Syntax analysis Semantic analysis Syntax
Transformation Tutorials - Build your first analyzer and code fix C#
programming guide
- Syntax analysis Semantic analysis Syntax
-
Overview
-
Programming concepts
- Overview
- Asynchronous programming Overview
- Asynchronous programming scenarios Task
asynchronous programming model Async return types - Cancel tasks
- Cancel a list of tasks
- Cancel tasks after a period of time
- Process asynchronous tasks as they
complete Asynchronous file access - Attributes Overview
- Creating Custom Attributes
- Accessing Attributes by Using Reflection
- How to create a C/C++ union by using attributes
Collections - Covariance and contravariance Overview
- Variance in Generic Interfaces Create Variant
Generic Interfaces - Use Variance in Interfaces for Generic Collections
Variance in Delegates - Use Variance in Delegates
- Use Variance for Func and Action Generic
Delegates Expression trees - Overview
- How to execute expression trees How to modify
expression trees - How to use expression trees to build dynamic
queries Debugging Expression Trees in Visual Studio - DebugView Syntax
- Iterators
- Language-Integrated Query (LINQ) Overview
- Getting Started with LINQ in C# Introduction
to LINQ Queries LINQ and Generic Types Basic LINQ
Query Operations - Data Transformations with LINQ
- Type Relationships in LINQ Query Operations
Query Syntax and Method Syntax in LINQ - C# Features That Support LINQ Walkthrough:
Writing Queries in C# (LINQ) Standard Query Operators Overview
Overview - Query Expression Syntax for Standard Query
Operators Classification of Standard Query Operators by Manner of Execution Sorting
Data - Set Operations Filtering Data Quantifier
Operations Projection Operations Partitioning Data - Join Operations Grouping Data Generation
Operations Equality Operations Element Operations Converting Data Types - Concatenation Operations Aggregation Operations
LINQ to Objects - Overview
- LINQ and Strings How to articles
- How to count occurrences of a word in a
string (LINQ) - How to query for sentences that contain
a specified set of words (LINQ) How to query for characters in a string
(LINQ) - How to combine LINQ queries with
regular expressions How to find the set difference between two lists (LINQ) How to sort or filter text data by any word or field (LINQ) How to reorder the fields of a delimited file (LINQ) - How to combine and compare string collections
(LINQ) - How to populate object collections from
multiple sources (LINQ) How to split a file into many files
by using groups (LINQ) - How to join content from dissimilar files
(LINQ)
16.. How to compute column values in a CSV text file (LINQ) LINQ and Reflection - How to query an assembly's metadata with
Reflection (LINQ) LINQ and File Directories - Overview
- How to query for files with a specified
attribute or name How to group files by extension (LINQ) - How to query for the total number of bytes
in a set of folders (LINQ) How to compare the contents of two
folders (LINQ) - How to query for the largest file or files
in a directory tree (LINQ) How to query for duplicate files in
a directory tree (LINQ) - How to query the contents of files in a
folder (LINQ) How to query an ArrayList with LINQ - How to add custom methods for LINQ
queries LINQ to ADO.NET (Portal
Page) - Enabling a Data Source for LINQ Querying
Visual Studio IDE and Tools Support for LINQ Reflection - Serialization (C#)
- Overview
- How to write object data to an XML file
How to read object data from an XML file - Walkthrough: Persisting an Object in Visual
Studio Statements, expressions, and operators - Overview Statements
- Expression-bodied members Anonymous functions Overview
- How to use lambda expressions in a query
Equality and equality comparisons - Equality comparisons
- How to define value equality for a type
How to test for reference equality (identity)
-
Types
- Casting and Type Conversions Boxing and
Unboxing - How to convert a byte array to an int How
to convert a string to a number - How to convert between hexadecimal strings
and numeric types Using Type dynamic - Walkthrough: Creating and Using Dynamic
Objects (C# and Visual Basic) Classes, Structs, and Records - Polymorphism
- Versioning with the Override and New Keywords
Knowing When to Use Override and New Keywords How to override the ToString method - Members
- Members overview
- Abstract and Sealed Classes and Class Members
- Static Classes and Static Class Members
- Access Modifiers Fields
- Constants
- How to define abstract properties How
to define constants in C# Properties - Properties overview Using Properties Interface
Properties - Restricting Accessor Accessibility
- How to declare and use read write
properties Auto-Implemented
Properties - How to implement a lightweight class
with auto-implemented
properties Methods - Methods overview Local functions
- Ref returns and ref locals Parameters
- Passing parameters
- Passing Value-Type Parameters Passing Reference-Type Parameters
- How to know the difference between passing
a struct and passing a class reference to a method - Implicitly Typed Local Variables
- How to use implicitly typed local variables
and arrays in a query expression Extension Methods - How to implement and call a custom extension
method How to create a new method for an enumeration Named and Optional
Arguments - How to use named and optional arguments
in Office programming Constructors - Constructors overview
- Using Constructors
- Instance Constructors Private Constructors
Static Constructors - How to write a copy constructor Finalizers
- Object and Collection Initializers
- How to initialize objects by using an
object initializer How to initialize a dictionary with a collection initializer
Nested Types - Partial Classes and Methods
- How to return subsets of element properties
in a query Interfaces - Explicit Interface Implementation
- How to explicitly implement interface members
- How to explicitly implement members of two
interfaces Delegates - Overview
- Using Delegates
- Delegates with Named vs. Anonymous Methods
- How to combine delegates (Multicast Delegates) (C# Programming Guide) How to declare, instantiate, and use
a delegate
- Casting and Type Conversions Boxing and
-
Arrays Overview
- Single-Dimensional Arrays Multidimensional Arrays Jagged Arrays
- Using foreach with Arrays Passing
Arrays as Arguments Implicitly Typed Arrays Strings - Programming with strings
- How to determine whether a string represents
a numeric value
-
Indexers Overview Using Indexers
- Indexers in Interfaces
- Comparison Between Properties and
Indexers Events - Overview
- How to subscribe to and unsubscribe from
events - How to publish events that conform to
.NET Guidelines How to raise base class events in derived classes - How to implement interface events
- How to implement custom event accessors
Generics - Generic Type Parameters Constraints on Type
Parameters Generic Classes - Generic Interfaces Generic Methods Generics
and Arrays Generic Delegates - Differences Between C++ Templates and
C# Generics Generics in the Run Time - Generics and Reflection Generics and
Attributes Namespaces - Using namespaces
- How to use the My namespace XML
documentation comments Overview - Recommended tags for documentation
comments Processing the XML file - Delimiters for documentation tags
- How to use the XML documentation features
Documentation tag reference - <c>
- <code>
- cref attribute
- <example>
- <exception>
- <include>
- <inheritdoc>
- <list>
- <para>
- <param>
- <paramref>
- <permission>
- <remarks>
- <returns>
- <see>
- <seealso>
- <summary>
- <typeparam>
- <typeparamref>
- <value>
-
File System and the Registry Overview
- How to iterate through a directory tree
- How to get information about files, folders,
and drives How to create a file or folder - How to copy, delete, and move files and
folders - How to provide a progress dialog box
for file operations How to write to a text file - How to read From a text file
- How to read a text file one line at a time
- How to create a key in the registry Interoperability
- .NET Interoperability Interoperability Overview
- How to access Office interop objects by
using C# features How to use indexed properties in COM interop programming How to
use platform invoke to play a WAV file - Walkthrough: Office Programming (C# and Visual Basic) Example COM Class
-
Language reference Overview
-
Configure language version Types
- Value types Overview
- Integral numeric types
- nint and nuint native integer types Floating-point numeric types
- Built-in numeric conversions bool
- char
- Enumeration types Structure types Tuple types Nullable value types
- Reference types
- Features of reference types Built-in reference types record
- class interface
- Nullable reference types
- void var
- Built-in types Unmanaged types Default values Keywords Overview
- Modifiers
- Access Modifiers Quick reference Accessibility
Levels Accessibility Domain - Restrictions on Using Accessibility Levels
internal - private protected
public - protected internal private protected abstract
- async const event extern
- in (generic modifier)
new (member modifier) out (generic modifier)
override - readonly sealed static
- unsafe
- virtual volatile
- Statement Keywords Statement categories
Selection Statements if-else - switch
- Jump Statements break
- continue goto return
- Exception Handling Statements throw
- try-catch try-finally
- try-catch-finally
Checked and Unchecked Overview - checked unchecked fixed Statement lock Statement
- Method Parameters Passing parameters params
- in (Parameter Modifier) ref
- out (Parameter Modifier) Namespace Keywords namespace
- using
- Contexts for using using Directive using static Directive using Statement
- extern alias
- Generic Type Constraint Keywords new constraint
- where
- Access Keywords base
- this
- Literal Keywords null
- true and false default
- Contextual Keywords Quick reference add
- get init
- partial (Type) partial
(Method) remove - set
- when (filter condition)
value - yield
- Query Keywords Quick reference from clause
where clause - select clause
- group clause into
- orderby clause join clause
- let clause ascending descending on
- equals by
- in
-
Operators and expressions Overview
- Arithmetic operators Boolean logical
operators Bitwise and shift operators Equality operators Comparison operators - Member access operators and expressions
Type-testing operators and
cast expression User-defined conversion
operators - Pointer-related operators Assignment operators Lambda expressions Patterns
-
- and += operators
-
- and -= operators
- ?: operator
- ! (null-forgiving) operator
- ?? and ??= operators
-
- operator
- :: operator
- await operator
- default value expressions delegate operator
- is operator
nameof expression new operator sizeof operator - stackalloc expression switch expression
- true and false operators with
expression Operator overloading
- Arithmetic operators Boolean logical
-
Statements
- Iteration statements Special characters
Overview - $ -- string interpolation @ -- verbatim identifier
- Iteration statements Special characters
-
Attributes read by the compiler Global attributes
- Caller information Nullable static analysis
Miscellaneous
- Caller information Nullable static analysis
-
Unsafe code and pointers Preprocessor directives
Compiler options- How to set options Language options Output
options Input options - Error and warning options
- Code generation options
- Security options Resources options Miscellaneous
options Advanced options Compiler messages
- How to set options Language options Output
-
C# 0. draft specification C# 0. - 0. proposals