Author:GoalKicker.com
No description
Tags
Support Statistics
¥.00 ·
0times
Text Preview (First 20 pages)
Registered users can read the full content for free
Register as a Gaohf Library member to read the complete e-book online for free and enjoy a better reading experience.
Page
1
.NET Framework Notes for Professionals.NET Framework Notes for Professionals GoalKicker.com Free Programming Books Disclaimer This is an unocial free book created for educational purposes and is not aliated with ocial .NET Framework group(s) or company(s). All trademarks and registered trademarks are the property of their respective owners 100+ pages of professional hints and tricks
Page
2
Contents About 1 ................................................................................................................................................................................... Chapter 1: Getting started with .NET Framework 2 ........................................................................................ Section 1.1: Hello World in C# 2 ........................................................................................................................................ Section 1.2: Hello World in F# 3 ....................................................................................................................................... Section 1.3: Hello World in Visual Basic .NET 3 .............................................................................................................. Section 1.4: Hello World in C++/CLI 3 .............................................................................................................................. Section 1.5: Hello World in IL 3 ......................................................................................................................................... Section 1.6: Hello World in PowerShell 4 ......................................................................................................................... Section 1.7: Hello World in Nemerle 4 ............................................................................................................................. Section 1.8: Hello World in Python (IronPython) 4 ......................................................................................................... Section 1.9: Hello World in Oxygene 4 ............................................................................................................................ Section 1.10: Hello World in Boo 4 ................................................................................................................................... Chapter 2: Strings 5 ......................................................................................................................................................... Section 2.1: Count characters 5 ....................................................................................................................................... Section 2.2: Count distinct characters 5 ......................................................................................................................... Section 2.3: Convert string to/from another encoding 5 ............................................................................................. Section 2.4: Comparing strings 6 .................................................................................................................................... Section 2.5: Count occurrences of a character 6 .......................................................................................................... Section 2.6: Split string into fixed length blocks 6 ......................................................................................................... Section 2.7: Object.ToString() virtual method 7 ............................................................................................................ Section 2.8: Immutability of strings 8 ............................................................................................................................. Chapter 3: DateTime parsing 9 ................................................................................................................................. Section 3.1: ParseExact 9 .................................................................................................................................................. Section 3.2: TryParse 10 .................................................................................................................................................. Section 3.3: TryParseExact 12 ......................................................................................................................................... Chapter 4: Dictionaries 13 ............................................................................................................................................ Section 4.1: Initializing a Dictionary with a Collection Initializer 13 .............................................................................. Section 4.2: Adding to a Dictionary 13 ........................................................................................................................... Section 4.3: Getting a value from a dictionary 13 ......................................................................................................... Section 4.4: Make a Dictionary<string, T> with Case-Insensivitve keys 14 ................................................................. Section 4.5: IEnumerable to Dictionary (≥ .NET 3.5) 14 ................................................................................................ Section 4.6: Enumerating a Dictionary 14 ...................................................................................................................... Section 4.7: ConcurrentDictionary<TKey, TValue> (from .NET 4.0) 15 ...................................................................... Section 4.8: Dictionary to List 16 ..................................................................................................................................... Section 4.9: Removing from a Dictionary 16 ................................................................................................................. Section 4.10: ContainsKey(TKey) 17 ............................................................................................................................... Section 4.11: ConcurrentDictionary augmented with Lazy'1 reduces duplicated computation 17 ........................... Chapter 5: Collections 19 .............................................................................................................................................. Section 5.1: Using collection initializers 19 ...................................................................................................................... Section 5.2: Stack 19 ........................................................................................................................................................ Section 5.3: Creating an initialized List with Custom Types 20 .................................................................................... Section 5.4: Queue 22 ....................................................................................................................................................... Chapter 6: ReadOnlyCollections 24 ......................................................................................................................... Section 6.1: Creating a ReadOnlyCollection 24 .............................................................................................................. Section 6.2: Updating a ReadOnlyCollection 24 ........................................................................................................... Section 6.3: Warning: Elements in a ReadOnlyCollection are not inherently read-only 24 ......................................
Page
3
Chapter 7: Stack and Heap 26 ................................................................................................................................... Section 7.1: Value types in use 26 ................................................................................................................................... Section 7.2: Reference types in use 26 ........................................................................................................................... Chapter 8: LINQ 28 ........................................................................................................................................................... Section 8.1: SelectMany (flat map) 28 ............................................................................................................................ Section 8.2: Where (filter) 29 ........................................................................................................................................... Section 8.3: Any 29 ........................................................................................................................................................... Section 8.4: GroupJoin 30 ................................................................................................................................................ Section 8.5: Except 31 ...................................................................................................................................................... Section 8.6: Zip 31 ............................................................................................................................................................ Section 8.7: Aggregate (fold) 31 ..................................................................................................................................... Section 8.8: ToLookup 32 ................................................................................................................................................ Section 8.9: Intersect 32 ................................................................................................................................................... Section 8.10: Concat 32 .................................................................................................................................................... Section 8.11: All 32 ............................................................................................................................................................. Section 8.12: Sum 33 ......................................................................................................................................................... Section 8.13: SequenceEqual 33 ...................................................................................................................................... Section 8.14: Min 33 ........................................................................................................................................................... Section 8.15: Distinct 34 .................................................................................................................................................... Section 8.16: Count 34 ...................................................................................................................................................... Section 8.17: Cast 34 ......................................................................................................................................................... Section 8.18: Range 34 ..................................................................................................................................................... Section 8.19: ThenBy 35 ................................................................................................................................................... Section 8.20: Repeat 35 ................................................................................................................................................... Section 8.21: Empty 35 ..................................................................................................................................................... Section 8.22: Select (map) 35 .......................................................................................................................................... Section 8.23: OrderBy 36 ................................................................................................................................................. Section 8.24: OrderByDescending 36 ............................................................................................................................. Section 8.25: Contains 36 ................................................................................................................................................. Section 8.26: First (find) 36 .............................................................................................................................................. Section 8.27: Single 37 ..................................................................................................................................................... Section 8.28: Last 37 ........................................................................................................................................................ Section 8.29: LastOrDefault 37 ....................................................................................................................................... Section 8.30: SingleOrDefault 38 .................................................................................................................................... Section 8.31: FirstOrDefault 38 ........................................................................................................................................ Section 8.32: Skip 38 ......................................................................................................................................................... Section 8.33: Take 39 ....................................................................................................................................................... Section 8.34: Reverse 39 .................................................................................................................................................. Section 8.35: OfType 39 ................................................................................................................................................... Section 8.36: Max 39 ......................................................................................................................................................... Section 8.37: Average 39 ................................................................................................................................................. Section 8.38: GroupBy 40 ................................................................................................................................................. Section 8.39: ToDictionary 40 .......................................................................................................................................... Section 8.40: Union 41 ...................................................................................................................................................... Section 8.41: ToArray 42 .................................................................................................................................................. Section 8.42: ToList 42 ..................................................................................................................................................... Section 8.43: ElementAt 42 .............................................................................................................................................. Section 8.44: ElementAtOrDefault 42 ............................................................................................................................. Section 8.45: SkipWhile 42 ............................................................................................................................................... Section 8.46: TakeWhile 43 ..............................................................................................................................................
Page
4
Section 8.47: DefaultIfEmpty 43 ...................................................................................................................................... Section 8.48: Join 43 ........................................................................................................................................................ Section 8.49: Left Outer Join 44 ...................................................................................................................................... Chapter 9: ForEach 46 .................................................................................................................................................... Section 9.1: Extension method for IEnumerable 46 ....................................................................................................... Section 9.2: Calling a method on an object in a list 46 ................................................................................................. Chapter 10: Reflection 47 .............................................................................................................................................. Section 10.1: What is an Assembly? 47 ........................................................................................................................... Section 10.2: Compare two objects with reflection 47 .................................................................................................. Section 10.3: Creating Object and setting properties using reflection 48 ................................................................... Section 10.4: How to create an object of T using Reflection 48 .................................................................................. Section 10.5: Getting an attribute of an enum with reflection (and caching it) 48 .................................................... Chapter 11: Expression Trees 50 ................................................................................................................................. Section 11.1: building a predicate of form field == value 50 .......................................................................................... Section 11.2: Simple Expression Tree Generated by the C# Compiler 50 .................................................................... Section 11.3: Expression for retrieving a static field 51 .................................................................................................. Section 11.4: InvocationExpression Class 51 ................................................................................................................... Chapter 12: Custom Types 54 ...................................................................................................................................... Section 12.1: Struct Definition 54 ...................................................................................................................................... Section 12.2: Class Definition 54 ...................................................................................................................................... Chapter 13: Code Contracts 56 ................................................................................................................................... Section 13.1: Contracts for Interfaces 56 ........................................................................................................................ Section 13.2: Installing and Enabling Code Contracts 56 .............................................................................................. Section 13.3: Preconditions 58 ......................................................................................................................................... Section 13.4: Postconditions 59 ........................................................................................................................................ Chapter 14: Settings 60 .................................................................................................................................................. Section 14.1: AppSettings from ConfigurationSettings in .NET 1.x 60 ........................................................................... Section 14.2: Reading AppSettings from ConfigurationManager in .NET 2.0 and later 60 ....................................... Section 14.3: Introduction to strongly-typed application and user settings support from Visual Studio 61 ................................................................................................................................................................................ Section 14.4: Reading strongly-typed settings from custom section of configuration file 62 ................................. Chapter 15: Regular Expressions (System.Text.RegularExpressions) 65 .............................................. Section 15.1: Check if pattern matches input 65 ............................................................................................................ Section 15.2: Remove non alphanumeric characters from string 65 .......................................................................... Section 15.3: Passing Options 65 ..................................................................................................................................... Section 15.4: Match into groups 65 ................................................................................................................................. Section 15.5: Find all matches 65 .................................................................................................................................... Section 15.6: Simple match and replace 66 ................................................................................................................... Chapter 16: File Input/Output 67 ............................................................................................................................... Section 16.1: C# File.Exists() 67 ......................................................................................................................................... Section 16.2: VB WriteAllText 67 ...................................................................................................................................... Section 16.3: VB StreamWriter 67 .................................................................................................................................... Section 16.4: C# StreamWriter 67 ................................................................................................................................... Section 16.5: C# WriteAllText() 68 ................................................................................................................................... Chapter 17: System.IO 69 .............................................................................................................................................. Section 17.1: Reading a text file using StreamReader 69 .............................................................................................. Section 17.2: Serial Ports using System.IO.SerialPorts 69 ............................................................................................. Section 17.3: Reading/Writing Data Using System.IO.File 70 ....................................................................................... Chapter 18: System.IO.File class 72 ..........................................................................................................................
Page
5
Section 18.1: Delete a file 72 ............................................................................................................................................. Section 18.2: Strip unwanted lines from a text file 73 ................................................................................................... Section 18.3: Convert text file encoding 73 .................................................................................................................... Section 18.4: Enumerate files older than a specified amount 74 ................................................................................. Section 18.5: Move a File from one location to another 74 .......................................................................................... Chapter 19: Reading and writing Zip files 76 ...................................................................................................... Section 19.1: Listing ZIP contents 76 ................................................................................................................................ Section 19.2: Extracting files from ZIP files 76 ............................................................................................................... Section 19.3: Updating a ZIP file 76 ................................................................................................................................. Chapter 20: Managed Extensibility Framework 78 .......................................................................................... Section 20.1: Connecting (Basic) 78 ................................................................................................................................ Section 20.2: Exporting a Type (Basic) 78 ..................................................................................................................... Section 20.3: Importing (Basic) 79 .................................................................................................................................. Chapter 21: SpeechRecognitionEngine class to recognize speech 80 .................................................... Section 21.1: Asynchronously recognizing speech based on a restricted set of phrases 80 .................................... Section 21.2: Asynchronously recognizing speech for free text dictation 80 ............................................................. Chapter 22: System.Runtime.Caching.MemoryCache (ObjectCache) 81 .............................................. Section 22.1: Adding Item to Cache (Set) 81 .................................................................................................................. Section 22.2: System.Runtime.Caching.MemoryCache (ObjectCache) 81 ................................................................. Chapter 23: System.Reflection.Emit namespace 83 ....................................................................................... Section 23.1: Creating an assembly dynamically 83 ..................................................................................................... Chapter 24: .NET Core 86 ............................................................................................................................................. Section 24.1: Basic Console App 86 ................................................................................................................................. Chapter 25: ADO.NET 87 ................................................................................................................................................ Section 25.1: Best Practices - Executing Sql Statements 87 ......................................................................................... Section 25.2: Executing SQL statements as a command 88 ....................................................................................... Section 25.3: Using common interfaces to abstract away vendor specific classes 89 ............................................ Chapter 26: Dependency Injection 90 ..................................................................................................................... Section 26.1: How Dependency Injection Makes Unit Testing Easier 90 ..................................................................... Section 26.2: Dependency Injection - Simple example 90 ........................................................................................... Section 26.3: Why We Use Dependency Injection Containers (IoC Containers) 91 .................................................. Chapter 27: Platform Invoke 94 ................................................................................................................................ Section 27.1: Marshaling structs 94 ................................................................................................................................. Section 27.2: Marshaling unions 95 ................................................................................................................................ Section 27.3: Calling a Win32 dll function 96 ................................................................................................................. Section 27.4: Using Windows API 97 ............................................................................................................................... Section 27.5: Marshalling arrays 97 ................................................................................................................................ Chapter 28: NuGet packaging system 98 ............................................................................................................. Section 28.1: Uninstalling a package from one project in a solution 98 ..................................................................... Section 28.2: Installing a specific version of a package 98 ......................................................................................... Section 28.3: Adding a package source feed (MyGet, Klondike, ect) 98 .................................................................... Section 28.4: Installing the NuGet Package Manager 98 ............................................................................................. Section 28.5: Managing Packages through the UI 99 .................................................................................................. Section 28.6: Managing Packages through the console 99 ......................................................................................... Section 28.7: Updating a package 99 ............................................................................................................................ Section 28.8: Uninstalling a package 100 ...................................................................................................................... Section 28.9: Uninstall a specific version of package 100 ........................................................................................... Chapter 29: Globalization in ASP.NET MVC using Smart internationalization for ASP.NET 101 ............................................................................................................................................................................................
Page
6
Section 29.1: Basic configuration and setup 101 ........................................................................................................... Chapter 30: System.Net.Mail 103 .............................................................................................................................. Section 30.1: MailMessage 103 ........................................................................................................................................ Section 30.2: Mail with Attachment 104 ......................................................................................................................... Chapter 31: Using Progress<T> and IProgress<T> 105 ................................................................................... Section 31.1: Simple Progress reporting 105 .................................................................................................................. Section 31.2: Using IProgress<T> 105 ............................................................................................................................. Chapter 32: JSON Serialization 107 ......................................................................................................................... Section 32.1: Deserialization using System.Web.Script.Serialization.JavaScriptSerializer 107 ................................. Section 32.2: Serialization using Json.NET 107 ............................................................................................................. Section 32.3: Serialization-Deserialization using Newtonsoft.Json 108 ...................................................................... Section 32.4: Deserialization using Json.NET 108 ......................................................................................................... Section 32.5: Dynamic binding 108 ................................................................................................................................ Section 32.6: Serialization using Json.NET with JsonSerializerSettings 109 .............................................................. Chapter 33: JSON in .NET with Newtonsoft.Json 110 ..................................................................................... Section 33.1: Deserialize an object from JSON text 110 ............................................................................................... Section 33.2: Serialize object into JSON 110 ................................................................................................................. Chapter 34: XmlSerializer 111 .................................................................................................................................... Section 34.1: Formatting: Custom DateTime format 111 ............................................................................................. Section 34.2: Serialize object 111 .................................................................................................................................... Section 34.3: Deserialize object 111 ............................................................................................................................... Section 34.4: Behaviour: Map array name to property (XmlArray) 111 .................................................................... Section 34.5: Behaviour: Map Element name to Property 112 .................................................................................... Section 34.6: Eciently building multiple serializers with derived types specified dynamically 112 ...................... Chapter 35: VB Forms 115 ............................................................................................................................................ Section 35.1: Hello World in VB.NET Forms 115 ............................................................................................................. Section 35.2: For Beginners 115 ...................................................................................................................................... Section 35.3: Forms Timer 115 ........................................................................................................................................ Chapter 36: JIT compiler 118 ....................................................................................................................................... Section 36.1: IL compilation sample 118 ......................................................................................................................... Chapter 37: CLR 121 ......................................................................................................................................................... Section 37.1: An introduction to Common Language Runtime 121 ............................................................................. Chapter 38: TPL Dataflow 122 .................................................................................................................................... Section 38.1: Asynchronous Producer Consumer With A Bounded BuerBlock 122 ................................................ Section 38.2: Posting to an ActionBlock and waiting for completion 122 .................................................................. Section 38.3: Linking blocks to create a pipeline 122 ................................................................................................... Section 38.4: Synchronous Producer/Consumer with BuerBlock<T> 123 ............................................................... Chapter 39: Threading 125 ........................................................................................................................................... Section 39.1: Accessing form controls from other threads 125 ................................................................................... Chapter 40: Process and Thread anity setting 127 .................................................................................... Section 40.1: Get process anity mask 127 .................................................................................................................. Section 40.2: Set process anity mask 127 .................................................................................................................. Chapter 41: Parallel processing using .Net framework 129 ........................................................................ Section 41.1: Parallel Extensions 129 ............................................................................................................................... Chapter 42: Task Parallel Library (TPL) 130 ....................................................................................................... Section 42.1: Basic producer-consumer loop (BlockingCollection) 130 ...................................................................... Section 42.2: Parallel.Invoke 130 ..................................................................................................................................... Section 42.3: Task: Returning a value 131 .....................................................................................................................
Page
7
Section 42.4: Parallel.ForEach 131 .................................................................................................................................. Section 42.5: Parallel.For 131 .......................................................................................................................................... Section 42.6: Task: basic instantiation and Wait 132 .................................................................................................... Section 42.7: Task.WhenAll 132 ....................................................................................................................................... Section 42.8: Flowing execution context with AsyncLocal 132 .................................................................................... Section 42.9: Parallel.ForEach in VB.NET 133 ................................................................................................................ Section 42.10: Task: WaitAll and variable capturing 133 .............................................................................................. Section 42.11: Task: WaitAny 134 .................................................................................................................................... Section 42.12: Task: handling exceptions (using Wait) 134 .......................................................................................... Section 42.13: Task: handling exceptions (without using Wait) 134 ............................................................................ Section 42.14: Task: cancelling using CancellationToken 135 ..................................................................................... Section 42.15: Task.WhenAny 136 ................................................................................................................................... Chapter 43: Task Parallel Library (TPL) API Overviews 137 ....................................................................... Section 43.1: Perform work in response to a button click and update the UI 137 ..................................................... Chapter 44: Synchronization Contexts 138 ......................................................................................................... Section 44.1: Execute code on the UI thread after performing background work 138 ............................................. Chapter 45: Memory management 139 ................................................................................................................ Section 45.1: Use SafeHandle when wrapping unmanaged resources 139 ............................................................... Section 45.2: Unmanaged Resources 139 ..................................................................................................................... Chapter 46: Garbage Collection 141 ....................................................................................................................... Section 46.1: A basic example of (garbage) collection 141 ......................................................................................... Section 46.2: Live objects and dead objects - the basics 141 ..................................................................................... Section 46.3: Multiple dead objects 142 ......................................................................................................................... Section 46.4: Weak References 142 ............................................................................................................................... Section 46.5: Dispose() vs. finalizers 143 ....................................................................................................................... Section 46.6: Proper disposal and finalization of objects 144 ..................................................................................... Chapter 47: Exceptions 146 ......................................................................................................................................... Section 47.1: Catching and rethrowing caught exceptions 146 ................................................................................... Section 47.2: Using a finally block 147 ........................................................................................................................... Section 47.3: Exception Filters 147 .................................................................................................................................. Section 47.4: Rethrowing an exception within a catch block 148 ................................................................................ Section 47.5: Throwing an exception from a dierent method while preserving its information 148 .................... Section 47.6: Catching an exception 149 ....................................................................................................................... Chapter 48: System.Diagnostics 150 ...................................................................................................................... Section 48.1: Run shell commands 150 .......................................................................................................................... Section 48.2: Send Command to CMD and Receive Output 150 ................................................................................. Section 48.3: Stopwatch 152 ........................................................................................................................................... Chapter 49: Encryption / Cryptography 153 ..................................................................................................... Section 49.1: Encryption and Decryption using Cryptography (AES) 153 .................................................................. Section 49.2: RijndaelManaged 154 ............................................................................................................................... Section 49.3: Encrypt and decrypt data using AES (in C#) 155 .................................................................................. Section 49.4: Create a Key from a Password / Random SALT (in C#) 158 ............................................................... Chapter 50: Work with SHA1 in C# 161 ................................................................................................................... Section 50.1: #Generate SHA1 checksum of a file 161 .................................................................................................. Section 50.2: #Generate hash of a text 161 .................................................................................................................. Chapter 51: Unit testing 162 ......................................................................................................................................... Section 51.1: Adding MSTest unit testing project to an existing solution 162 ............................................................. Section 51.2: Creating a sample test method 162 ......................................................................................................... Chapter 52: Write to and read from StdErr stream 163 ...............................................................................
Page
8
Section 52.1: Write to standard error output using Console 163 ................................................................................. Section 52.2: Read from standard error of child process 163 .................................................................................... Chapter 53: Upload file and POST data to webserver 164 .......................................................................... Section 53.1: Upload file with WebRequest 164 ............................................................................................................. Chapter 54: Networking 166 ....................................................................................................................................... Section 54.1: Basic TCP chat (TcpListener, TcpClient, NetworkStream) 166 .............................................................. Section 54.2: Basic SNTP client (UdpClient) 167 ........................................................................................................... Chapter 55: HTTP servers 169 .................................................................................................................................... Section 55.1: Basic read-only HTTP file server (ASP.NET Core) 169 ........................................................................... Section 55.2: Basic read-only HTTP file server (HttpListener) 170 ............................................................................. Chapter 56: HTTP clients 173 ...................................................................................................................................... Section 56.1: Reading GET response as string using System.Net.HttpClient 173 ....................................................... Section 56.2: Basic HTTP downloader using System.Net.Http.HttpClient 173 ........................................................... Section 56.3: Reading GET response as string using System.Net.HttpWebRequest 174 ......................................... Section 56.4: Reading GET response as string using System.Net.WebClient 174 ..................................................... Section 56.5: Sending a POST request with a string payload using System.Net.HttpWebRequest 174 ................. Section 56.6: Sending a POST request with a string payload using System.Net.WebClient 175 ............................. Section 56.7: Sending a POST request with a string payload using System.Net.HttpClient 175 .............................. Chapter 57: Serial Ports 176 ........................................................................................................................................ Section 57.1: Basic operation 176 .................................................................................................................................... Section 57.2: List available port names 176 .................................................................................................................. Section 57.3: Asynchronous read 176 ............................................................................................................................ Section 57.4: Synchronous text echo service 176 ......................................................................................................... Section 57.5: Asynchronous message receiver 177 ...................................................................................................... Appendix A: Acronym Glossary 180 ......................................................................................................................... Section A.1: .Net Related Acronyms 180 ........................................................................................................................ Credits 181 ............................................................................................................................................................................ You may also like 184 ......................................................................................................................................................
Page
9
GoalKicker.com – .NET Framework Notes for Professionals 1 About Please feel free to share this PDF with anyone for free, latest version of this book can be downloaded from: https://goalkicker.com/DotNETFrameworkBook This .NET Framework Notes for Professionals book is compiled from Stack Overflow Documentation, the content is written by the beautiful people at Stack Overflow. Text content is released under Creative Commons BY-SA, see credits at the end of this book whom contributed to the various chapters. Images may be copyright of their respective owners unless otherwise specified This is an unofficial free book created for educational purposes and is not affiliated with official .NET Framework group(s) or company(s) nor Stack Overflow. All trademarks and registered trademarks are the property of their respective company owners The information presented in this book is not guaranteed to be correct nor accurate, use at your own risk Please send feedback and corrections to web@petercv.com
Page
10
GoalKicker.com – .NET Framework Notes for Professionals 2 Chapter 1: Getting started with .NET Framework .NET Version Release Date 1.0 2002-02-13 1.1 2003-04-24 2.0 2005-11-07 3.0 2006-11-06 3.5 2007-11-19 3.5 SP1 2008-08-11 4.0 2010-04-12 4.5 2012-08-15 4.5.1 2013-10-17 4.5.2 2014-05-05 4.6 2015-07-20 4.6.1 2015-11-17 4.6.2 2016-08-02 4.7 2017-04-05 4.7.1 2017-10-17 Compact Framework Version Release Date 1.0 2000-01-01 2.0 2005-10-01 3.5 2007-11-19 3.7 2009-01-01 3.9 2013-06-01 Micro Framework Version Release Date 4.2 2011-10-04 4.3 2012-12-04 4.4 2015-10-20 Section 1.1: Hello World in C# using System; class Program { // The Main() function is the first function to be executed in a program static void Main() { // Write the string "Hello World to the standard out Console.WriteLine("Hello World"); } } Console.WriteLine has several overloads. In this case, the string "Hello World" is the parameter, and it will output the "Hello World" to the standard out stream during execution. Other overloads may call the .ToString of the
Page
11
GoalKicker.com – .NET Framework Notes for Professionals 3 argument before writing to the stream. See the .NET Framework Documentation for more information. Live Demo in Action at .NET Fiddle Introduction to C# Section 1.2: Hello World in F# open System [<EntryPoint>] let main argv = printfn "Hello World" 0 Live Demo in Action at .NET Fiddle Introduction to F# Section 1.3: Hello World in Visual Basic .NET Imports System Module Program Public Sub Main() Console.WriteLine("Hello World") End Sub End Module Live Demo in Action at .NET Fiddle Introduction to Visual Basic .NET Section 1.4: Hello World in C++/CLI using namespace System; int main(array<String^>^ args) { Console::WriteLine("Hello World"); } Section 1.5: Hello World in IL .class public auto ansi beforefieldinit Program extends [mscorlib]System.Object { .method public hidebysig static void Main() cil managed { .maxstack 8 IL_0000: nop IL_0001: ldstr "Hello World" IL_0006: call void [mscorlib]System.Console::WriteLine(string) IL_000b: nop IL_000c: ret }
Page
12
GoalKicker.com – .NET Framework Notes for Professionals 4 .method public hidebysig specialname rtspecialname instance void .ctor() cil managed { .maxstack 8 IL_0000: ldarg.0 IL_0001: call instance void [mscorlib]System.Object::.ctor() IL_0006: ret } } Section 1.6: Hello World in PowerShell Write-Host "Hello World" Introduction to PowerShell Section 1.7: Hello World in Nemerle System.Console.WriteLine("Hello World"); Section 1.8: Hello World in Python (IronPython) print "Hello World" import clr from System import Console Console.WriteLine("Hello World") Section 1.9: Hello World in Oxygene namespace HelloWorld; interface type App = class public class method Main(args: array of String); end; implementation class method App.Main(args: array of String); begin Console.WriteLine('Hello World'); end; end. Section 1.10: Hello World in Boo print "Hello World"
Page
13
GoalKicker.com – .NET Framework Notes for Professionals 5 Chapter 2: Strings Section 2.1: Count characters If you need to count characters then, for the reasons explained in Remarks section, you can't simply use Length property because it's the length of the array of System.Char which are not characters but code-units (not Unicode code-points nor graphemes). Correct code is then: int length = text.EnumerateCharacters().Count(); A small optimization may rewrite EnumerateCharacters() extension method specifically for this purpose: public static class StringExtensions { public static int CountCharacters(this string text) { if (String.IsNullOrEmpty(text)) return 0; int count = 0; var enumerator = StringInfo.GetTextElementEnumerator(text); while (enumerator.MoveNext()) ++count; return count; } } Section 2.2: Count distinct characters If you need to count distinct characters then, for the reasons explained in Remarks section, you can't simply use Length property because it's the length of the array of System.Char which are not characters but code-units (not Unicode code-points nor graphemes). If, for example, you simply write text.Distinct().Count() you will get incorrect results, correct code: int distinctCharactersCount = text.EnumerateCharacters().Count(); One step further is to count occurrences of each character, if performance aren't an issue you may simply do it like this (in this example regardless of case): var frequencies = text.EnumerateCharacters() .GroupBy(x => x, StringComparer.CurrentCultureIgnoreCase) .Select(x => new { Character = x.Key, Count = x.Count() }; Section 2.3: Convert string to/from another encoding .NET strings contain System.Char (UTF-16 code-units). If you want to save (or manage) text with another encoding you have to work with an array of System.Byte. Conversions are performed by classes derived from System.Text.Encoder and System.Text.Decoder which, together, can convert to/from another encoding (from a byte X encoded array byte[] to an UTF-16 encoded System.String and vice-versa). Because the encoder/decoder usually works very close to each other they're grouped together in a class derived
Page
14
GoalKicker.com – .NET Framework Notes for Professionals 6 from System.Text.Encoding, derived classes offer conversions to/from popular encodings (UTF-8, UTF-16 and so on). Examples: Convert a string to UTF-8 byte[] data = Encoding.UTF8.GetBytes("This is my text"); Convert UTF-8 data to a string var text = Encoding.UTF8.GetString(data); Change encoding of an existing text file This code will read content of an UTF-8 encoded text file and save it back encoded as UTF-16. Note that this code is not optimal if file is big because it will read all its content into memory: var content = File.ReadAllText(path, Encoding.UTF8); File.WriteAllText(content, Encoding.UTF16); Section 2.4: Comparing strings Despite String is a reference type == operator compares string values rather than references. As you may know string is just an array of characters. But if you think that strings equality check and comparison is made character by character, you are mistaken. This operation is culture specific (see Remarks below): some character sequences can be treated as equal depending on the culture. Think twice before short circuiting equality check by comparing Length properties of two strings! Use overloads of String.Equals method which accept additional StringComparison enumeration value, if you need to change default behavior. Section 2.5: Count occurrences of a character Because of the reasons explained in Remarks section you can't simply do this (unless you want to count occurrences of a specific code-unit): int count = text.Count(x => x == ch); You need a more complex function: public static int CountOccurrencesOf(this string text, string character) { return text.EnumerateCharacters() .Count(x => String.Equals(x, character, StringComparer.CurrentCulture)); } Note that string comparison (in contrast to character comparison which is culture invariant) must always be performed according to rules to a specific culture. Section 2.6: Split string into fixed length blocks We cannot break a string into arbitrary points (because a System.Char may not be valid alone because it's a combining character or part of a surrogate) then code must take that into account (note that with length I mean the
Page
15
GoalKicker.com – .NET Framework Notes for Professionals 7 number of graphemes not the number of code-units): public static IEnumerable<string> Split(this string value, int desiredLength) { var characters = StringInfo.GetTextElementEnumerator(value); while (characters.MoveNext()) yield return String.Concat(Take(characters, desiredLength)); } private static IEnumerable<string> Take(TextElementEnumerator enumerator, int count) { for (int i = 0; i < count; ++i) { yield return (string)enumerator.Current; if (!enumerator.MoveNext()) yield break; } } Section 2.7: Object.ToString() virtual method Everything in .NET is an object, hence every type has ToString() method defined in Object class which can be overridden. Default implementation of this method just returns the name of the type: public class Foo { } var foo = new Foo(); Console.WriteLine(foo); // outputs Foo ToString() is implicitly called when concatinating value with a string: public class Foo { public override string ToString() { return "I am Foo"; } } var foo = new Foo(); Console.WriteLine("I am bar and "+foo);// outputs I am bar and I am Foo The result of this method is also extensively used by debugging tools. If, for some reason, you do not want to override this method, but want to customize how debugger shows the value of your type, use DebuggerDisplay Attribute (MSDN): // [DebuggerDisplay("Person = FN {FirstName}, LN {LastName}")] [DebuggerDisplay("Person = FN {"+nameof(Person.FirstName)+"}, LN {"+nameof(Person.LastName)+"}")] public class Person { public string FirstName { get; set; } public string LastName { get; set;} // ... }
Page
16
GoalKicker.com – .NET Framework Notes for Professionals 8 Section 2.8: Immutability of strings Strings are immutable. You just cannot change existing string. Any operation on the string crates a new instance of the string having new value. It means that if you need to replace a single character in a very long string, memory will be allocated for a new value. string veryLongString = ... // memory is allocated string newString = veryLongString.Remove(0,1); // removes first character of the string. If you need to perform many operations with string value, use StringBuilder class which is designed for efficient strings manipulation: var sb = new StringBuilder(someInitialString); foreach(var str in manyManyStrings) { sb.Append(str); } var finalString = sb.ToString();
Page
17
GoalKicker.com – .NET Framework Notes for Professionals 9 Chapter 3: DateTime parsing Section 3.1: ParseExact var dateString = "2015-11-24"; var date = DateTime.ParseExact(dateString, "yyyy-MM-dd", null); Console.WriteLine(date); 11/24/2015 12:00:00 AM Note that passing CultureInfo.CurrentCulture as the third parameter is identical to passing null. Or, you can pass a specific culture. Format Strings Input string can be in any format that matches the format string var date = DateTime.ParseExact("24|201511", "dd|yyyyMM", null); Console.WriteLine(date); 11/24/2015 12:00:00 AM Any characters that are not format specifiers are treated as literals var date = DateTime.ParseExact("2015|11|24", "yyyy|MM|dd", null); Console.WriteLine(date); 11/24/2015 12:00:00 AM Case matters for format specifiers var date = DateTime.ParseExact("2015-01-24 11:11:30", "yyyy-mm-dd hh:MM:ss", null); Console.WriteLine(date); 11/24/2015 11:01:30 AM Note that the month and minute values were parsed into the wrong destinations. Single-character format strings must be one of the standard formats var date = DateTime.ParseExact("11/24/2015", "d", new CultureInfo("en-US")); var date = DateTime.ParseExact("2015-11-24T10:15:45", "s", null); var date = DateTime.ParseExact("2015-11-24 10:15:45Z", "u", null); Exceptions ArgumentNullException
Page
18
GoalKicker.com – .NET Framework Notes for Professionals 10 var date = DateTime.ParseExact(null, "yyyy-MM-dd", null); var date = DateTime.ParseExact("2015-11-24", null, null); FormatException var date = DateTime.ParseExact("", "yyyy-MM-dd", null); var date = DateTime.ParseExact("2015-11-24", "", null); var date = DateTime.ParseExact("2015-0C-24", "yyyy-MM-dd", null); var date = DateTime.ParseExact("2015-11-24", "yyyy-QQ-dd", null); // Single-character format strings must be one of the standard formats var date = DateTime.ParseExact("2015-11-24", "q", null); // Format strings must match the input exactly* (see next section) var date = DateTime.ParseExact("2015-11-24", "d", null); // Expects 11/24/2015 or 24/11/2015 for most cultures Handling multiple possible formats var date = DateTime.ParseExact("2015-11-24T10:15:45", new [] { "s", "t", "u", "yyyy-MM-dd" }, // Will succeed as long as input matches one of these CultureInfo.CurrentCulture, DateTimeStyles.None); Handling culture differences var dateString = "10/11/2015"; var date = DateTime.ParseExact(dateString, "d", new CultureInfo("en-US")); Console.WriteLine("Day: {0}; Month: {1}", date.Day, date.Month); Day: 11; Month: 10 date = DateTime.ParseExact(dateString, "d", new CultureInfo("en-GB")); Console.WriteLine("Day: {0}; Month: {1}", date.Day, date.Month); Day: 10; Month: 11 Section 3.2: TryParse This method accepts a string as input, attempts to parse it into a DateTime, and returns a Boolean result indicating success or failure. If the call succeeds, the variable passed as the out parameter is populated with the parsed result. If the parse fails, the variable passed as the out parameter is set to the default value, DateTime.MinValue. TryParse(string, out DateTime) DateTime parsedValue; if (DateTime.TryParse("monkey", out parsedValue)) { Console.WriteLine("Apparently, 'monkey' is a date/time value. Who knew?"); } This method attempts to parse the input string based on the system regional settings and known formats such as
Page
19
GoalKicker.com – .NET Framework Notes for Professionals 11 ISO 8601 and other common formats. DateTime.TryParse("11/24/2015 14:28:42", out parsedValue); // true DateTime.TryParse("2015-11-24 14:28:42", out parsedValue); // true DateTime.TryParse("2015-11-24T14:28:42", out parsedValue); // true DateTime.TryParse("Sat, 24 Nov 2015 14:28:42", out parsedValue); // true Since this method does not accept culture info, it uses the system locale. This can lead to unexpected results. // System set to en-US culture bool result = DateTime.TryParse("24/11/2015", out parsedValue); Console.WriteLine(result); False // System set to en-GB culture bool result = DateTime.TryParse("11/24/2015", out parsedValue); Console.WriteLine(result); False // System set to en-GB culture bool result = DateTime.TryParse("10/11/2015", out parsedValue); Console.WriteLine(result); True Note that if you are in the US, you might be surprised that the parsed result is November 10, not October 11. TryParse(string, IFormatProvider, DateTimeStyles, out DateTime) if (DateTime.TryParse(" monkey ", new CultureInfo("en-GB"), DateTimeStyles.AllowLeadingWhite | DateTimeStyles.AllowTrailingWhite, out parsedValue) { Console.WriteLine("Apparently, ' monkey ' is a date/time value. Who knew?"); } Unlike its sibling method, this overload allows a specific culture and style(s) to be specified. Passing null for the IFormatProvider parameter uses the system culture. Exceptions Note that it is possible for this method to throw an exception under certain conditions. These relate to the parameters introduced for this overload: IFormatProvider and DateTimeStyles. NotSupportedException: IFormatProvider specifies a neutral culture ArgumentException: DateTimeStyles is not a valid option, or contains incompatible flags such as AssumeLocal and AssumeUniversal.
Page
20
GoalKicker.com – .NET Framework Notes for Professionals 12 Section 3.3: TryParseExact This method behaves as a combination of TryParse and ParseExact: It allows custom format(s) to be specified, and returns a Boolean result indicating success or failure rather than throwing an exception if the parse fails. TryParseExact(string, string, IFormatProvider, DateTimeStyles, out DateTime) This overload attempts to parse the input string against a specific format. The input string must match that format in order to be parsed. DateTime.TryParseExact("11242015", "MMddyyyy", null, DateTimeStyles.None, out parsedValue); // true TryParseExact(string, string[], IFormatProvider, DateTimeStyles, out DateTime) This overload attempts to parse the input string against an array of formats. The input string must match at least one format in order to be parsed. DateTime.TryParseExact("11242015", new [] { "yyyy-MM-dd", "MMddyyyy" }, null, DateTimeStyles.None, out parsedValue); // true
The above is a preview of the first 20 pages. Register to read the complete e-book.
Comments 0
Loading comments...
Reply to Comment
Edit Comment