C# Cookbook, 2nd Edition

Book description

With C# Cookbook, 2nd Edition, you'll be able to learn and improve your mastery of both the C# language and the .NET platform. This updated bestseller has been completely revised to account for C# 2.0, the latest version of this popular object-oriented programming language. It also includes more than 100 new code solutions (over 300 overall) to common problems and tasks that you're sure to face as a C# programmer.

Nearly every solution, or "recipe," contains a complete, documented code sample showing you how to solve the specific problem, as well as a detailed discussion of how and why the underling technology works. This question-solution-discussion format is a proven teaching method, as any fan of O'Reilly's "Cookbook" series can attest to. In fact, no other source offers a learn-as-you-go format quite like this.

C# Cookbook, 2nd Edition is organized into 20 chapters, each of which focuses on a particular topic in creating C# solutions. Here are just some of what's covered:

  • Numeric data types
  • Strings and characters
  • Classes and structures
  • Generics
  • Exception handling
  • Delegates, events, and anonymous methods
  • Filesystem interactions
  • Web site access
  • XML usage (including XPath and XSLT)
  • Networking
  • Threading
  • Unsafe code

Best of all, you don't have to be an experienced C# or .NET developer to use C# Cookbook, 2nd Edition. You just have to be someone who wants to solve a problem now, without having to learn all the related theory first.

Table of contents

  1. Table of Contents (1/3)
  2. Table of Contents (2/3)
  3. Table of Contents (3/3)
  4. Preface
    1. Who This Book Is For
    2. What You Need to Use This Book
    3. Platform Notes
    4. How This Book Is Organized
    5. What Was Left Out
    6. Conventions Used in This Book
    7. About the Code
    8. Using Code Examples
    9. Comments and Questions
    10. Safari Enabled
    11. Acknowledgments
      1. From Jay Hilyard
      2. From Steve Teilhet
  5. Numbers and Enumerations
    1. 1.0 Introduction
    2. 1.1 Determining Approximate Equality Between a Fraction and Floating-Point Value
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    3. 1.2 Converting Degrees to Radians
      1. Problem
      2. Solution
      3. Discussion
    4. 1.3 Converting Radians to Degrees
      1. Problem
      2. Solution
      3. Discussion
    5. 1.4 Using the Bitwise Complement Operator with Various Data Types
      1. Problem
      2. Solution
      3. Discussion
    6. 1.5 Testing for an Even or Odd Value
      1. Problem
      2. Solution
      3. Discussion
    7. 1.6 Obtaining the High Word or Low Word of a Number
      1. Problem
      2. Solution
      3. Discussion
    8. 1.7 Converting a Number in Another Base to Base10
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    9. 1.8 Determining Whether a String Is a Valid Number
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    10. 1.9 Rounding a Floating-Point Value
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    11. 1.10 Choosing a Rounding Algorithm
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    12. 1.11 Converting Celsius to Fahrenheit
      1. Problem
      2. Solution
      3. Discussion
    13. 1.12 Converting Fahrenheit to Celsius
      1. Problem
      2. Solution
      3. Discussion
    14. 1.13 Safely Performing a Narrowing Numeric Cast
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    15. 1.14 Finding the Length of Any Three Sides of a Right Triangle
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    16. 1.15 Finding the Angles of a Right Triangle
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    17. 1.16 Displaying an Enumeration Value as a String
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    18. 1.17 Converting Plain Text to an Equivalent Enumeration Value
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    19. 1.18 Testing for a Valid Enumeration Value
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    20. 1.19 Testing for a Valid Enumeration of Flags
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    21. 1.20 Using Enumerated Members in a Bit Mask
      1. Problem
      2. Solution
      3. Discussion
    22. 1.21 Determining if One or More Enumeration Flags Are Set
      1. Problem
      2. Solution
      3. Discussion
    23. 1.22 Determining the Integral Part of a Decimal or Double
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
  6. Strings and Characters
    1. 2.0 Introduction
    2. 2.1 Determining the Kind of Character a char Contains
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    3. 2.2 Determining Whether a Character Is Within a Specified Range
      1. Problem
      2. Solution
      3. Discussion
    4. 2.3 Controlling Case Sensitivity When Comparing Two Characters
      1. Problem
      2. Solution
      3. Discussion
    5. 2.4 Finding All Occurrences of a Character Within a String
      1. Problem
      2. Solution
      3. Discussion
    6. 2.5 Finding the Location of All Occurrences of a String Within Another String
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    7. 2.6 Implementing a Poor Man’s Tokenizer to Deconstruct a String
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    8. 2.7 Controlling Case Sensitivity When Comparing Two Strings
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    9. 2.8 Comparing a String to the Beginning or End of a Second String
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    10. 2.9 Inserting Text into a String
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    11. 2.10 Removing or Replacing Characters Within a String
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    12. 2.11 Encoding Binary Data as Base64
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    13. 2.12 Decoding a Base64-Encoded Binary
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    14. 2.13 Converting a String Returned as a Byte[ ] Back into a String
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    15. 2.14 Passing a String to a Method That Accepts only a Byte[ ]
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    16. 2.15 Converting Strings to Other Types
      1. Problem
      2. Solution
      3. Discussion
    17. 2.16 Formatting Data in Strings
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    18. 2.17 Creating a Delimited String
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    19. 2.18 Extracting Items from a Delimited String
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    20. 2.19 Setting the Maximum Number of Characters a StringBuilder Can Contain
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    21. 2.20 Iterating over Each Character in a String
      1. Problem
      2. Solution
      3. Discussion
    22. 2.21 Improving String Comparison Performance
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    23. 2.22 Improving StringBuilder Performance
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    24. 2.23 Pruning Characters from the Head and/or Tail of a String
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    25. 2.24 Testing a String for Null or Empty
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    26. 2.25 Appending a Line
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    27. 2.26 Encoding Chunks of Data
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
  7. Classes and Structures
    1. 3.0 Introduction
    2. 3.1 Creating Union-Type Structures
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    3. 3.2 Allowing a Type to Represent Itself as a String
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    4. 3.3 Converting a String Representation of an Object into an Actual Object
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    5. 3.4 Implementing Polymorphism with Abstract Base Classes
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    6. 3.5 Making a Type Sortable
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    7. 3.6 Making a Type Searchable
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    8. 3.7 Indirectly Overloading the +=, –=, /=, and *= Operators
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    9. 3.8 Indirectly Overloading the &&, ||, and ?: Operators
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    10. 3.9 Turning Bits On or Off
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    11. 3.10 Making Error-Free Expressions
      1. Problem
      2. Solution
      3. Discussion
    12. 3.11 Minimizing (Reducing) Your Boolean Logic
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    13. 3.12 Converting Between Simple Types in a Language-Agnostic Manner
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    14. 3.13 Determining When to Use the Cast Operator, the as Operator, or the is Operator
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    15. 3.14 Casting with the as Operator
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    16. 3.15 Determining a Variable’s Type with the is Operator
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    17. 3.16 Implementing Polymorphism with Interfaces
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    18. 3.17 Calling the Same Method on Multiple Object Types
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    19. 3.18 Adding a Notification Callback Using an Interface
      1. Problem
      2. Solution (1/2)
      3. Solution (2/2)
      4. Discussion
      5. See Also
    20. 3.19 Using Multiple Entry Points to Version an Application
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    21. 3.20 Preventing the Creation of an Only Partially Initialized Object
      1. Problem
      2. Solution
      3. Discussion
    22. 3.21 Returning Multiple Items from a Method
      1. Problem
      2. Solution
      3. Discussion
    23. 3.22 Parsing Command-Line Parameters
      1. Problem
      2. Solution
      3. Discussion (1/2)
      4. Discussion (2/2)
      5. See Also
    24. 3.23 Retrofitting a Class to Interoperate with COM
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    25. 3.24 Initializing a Constant Field at Runtime
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    26. 3.25 Writing Code That Is Compatible with the Widest Range of Managed Languages
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    27. 3.26 Building Cloneable Classes
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    28. 3.27 Assuring an Object’s Disposal
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    29. 3.28 Releasing a COM Object Through Managed Code
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    30. 3.29 Creating an Object Cache
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    31. 3.30 Rolling Back Object Changes
      1. Problem
      2. Solution
      3. Discussion
    32. 3.31 Disposing of Unmanaged Resources
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    33. 3.32 Determining Where Boxing and Unboxing Occur
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
  8. Generics
    1. 4.0 Introduction
    2. 4.1 Deciding When and Where to Use Generics
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    3. 4.2 Understanding Generic Types
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    4. 4.3 Getting the Type of a Generic Type
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    5. 4.4 Replacing the ArrayList with Its Generic Counterpart
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    6. 4.5 Replacing the Stack and Queue with Their Generic Counterparts
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    7. 4.6 Implementing a Linked List
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    8. 4.7 Creating a Value Type That Can be Initialized to Null
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    9. 4.8 Reversing the Contents of a Sorted List
      1. Problem
      2. Solution
      3. Discussion (1/5)
      4. Discussion (2/5)
      5. Discussion (3/5)
      6. Discussion (4/5)
      7. Discussion (5/5)
      8. See Also
    10. 4.9 Making Read-Only Collections the Generic Way
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    11. 4.10 Replacing the Hashtable with Its Generic Counterpart
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    12. 4.11 Using foreach with Generic Dictionary Types
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    13. 4.12 Constraining Type Arguments
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    14. 4.13 Initializing Generic Variables to Their Default Values
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
  9. Collections
    1. 5.0 Introduction
    2. 5.1 Swapping Two Elements in an Array
      1. Problem
      2. Solution
      3. Discussion
    3. 5.2 Reversing an Array Quickly
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    4. 5.3 Reversing a Two-Dimensional Array
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    5. 5.4 Reversing a Jagged Array
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    6. 5.5 Writing a More Flexible StackTrace Class
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    7. 5.6 Determining the Number of Times an Item Appears in a List
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    8. 5.7 Retrieving All Instances of a Specific Item in a List
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    9. 5.8 Inserting and Removing Items from an Array
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    10. 5.9 Keeping Your List Sorted
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    11. 5.10 Sorting a Dictionary’s Keys and/or Values
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    12. 5.11 Creating a Dictionary with Max and Min Value Boundaries
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    13. 5.12 Displaying an Array’s Data as a Delimited String
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    14. 5.13 Storing Snapshots of Lists in an Array
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    15. 5.14 Persisting a Collection Between Application Sessions
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    16. 5.15 Testing Every Element in an Array or List
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    17. 5.16 Performing an Action on Each Element in an Array or List
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    18. 5.17 Creating a Read-Only Array or List
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
  10. Iterators and Partial Types
    1. 6.0 Introduction
    2. 6.1 Implementing Nested foreach Functionality in a Class
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    3. 6.2 Creating Custom Enumerators
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    4. 6.3 Creating an Iterator on a Generic Type
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    5. 6.4 Creating an Iterator on a Non-generic Type
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    6. 6.5 Creating Iterators That Accept Parameters
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    7. 6.6 Adding Multiple Iterators on a Single Type
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    8. 6.7 Implementing Iterators as Overloaded Operators
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    9. 6.8 Forcing an Iterator to Stop Iterating
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    10. 6.9 Dealing with Finally Blocks and Iterators
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    11. 6.10 Organizing Your Interface Implementations
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    12. 6.11 Generating Code That Is No Longer in Your Main Code Paths
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
  11. Exception Handling
    1. 7.0 Introduction
    2. 7.1 Verifying Critical Parameters
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    3. 7.2 Knowing When to Catch and Rethrow Exceptions
      1. Problem
      2. Solution
      3. Discussion
    4. 7.3 Identifying Exceptions and Their Usage
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    5. 7.4 Handling Derived Exceptions Individually
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    6. 7.5 Assuring Exceptions Are Not Lost When Using Finally Blocks
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    7. 7.6 Handling Exceptions Thrown from Methods Invoked via Reflection
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    8. 7.7 Debugging Problems When Loading an Assembly
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    9. 7.8 Mapping Back and Forth Between Managed Exceptions and HRESULTs
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    10. 7.9 Handling User-Defined HRESULTs
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    11. 7.10 Preventing Unhandled Exceptions
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    12. 7.11 Getting Exception Information
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    13. 7.12 Getting to the Root of a Problem Quickly
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    14. 7.13 Creating a New Exception Type
      1. Problem
      2. Solution
      3. Discussion
        1. Overriding the GetHashCode method
        2. Overriding the == and != operators
      4. See Also
    15. 7.14 Obtaining a Stack Trace
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    16. 7.15 Breaking on a First-Chance Exception
      1. Problem
      2. Solution
      3. See Also
    17. 7.16 Preventing the Nefarious TypeInitializationException
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    18. 7.17 Handling Exceptions Thrown from an Asynchronous Delegate
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    19. 7.18 Giving Exceptions the Extra Info They Need with Exception.Data
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    20. 7.19 Looking at Exceptions in a New Way Using Visualizers
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    21. 7.20 Dealing with Unhandled Exceptions in WinForms Applications
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
  12. Diagnostics
    1. 8.0 Introduction
    2. 8.1 Controlling Tracing Output in Production Code
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    3. 8.2 Providing Fine-Grained Control over Debugging/Tracing Output
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    4. 8.3 Creating Your Own Custom Switch Class
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    5. 8.4 Compiling Blocks of Code Conditionally
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    6. 8.5 Determining Whether a Process Has Stopped Responding
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    7. 8.6 Using Event Logs in Your Application
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    8. 8.7 Changing the Maximum Size of a Custom Event Log
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    9. 8.8 Searching Event Log Entries
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    10. 8.9 Watching the Event Log for a Specific Entry
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    11. 8.10 Finding All Sources Belonging to a Specific Event Log
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    12. 8.11 Implementing a Simple Performance Counter
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    13. 8.12 Implementing Performance Counters That Require a Base Counter
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    14. 8.13 Enabling and Disabling Complex Tracing Code
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    15. 8.14 Capturing Standard Output for a Process
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    16. 8.15 Creating Custom Debugging Displays for Your Classes
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    17. 8.16 Determining Current AppDomain Settings Information
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    18. 8.17 Boosting the Priority of a Process Programmatically
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    19. 8.18 Looking at Your Runtime Environment and Seeing What You Can Do About It
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
  13. Delegates, Events, and Anonymous Methods
    1. 9.0 Introduction
    2. 9.1 Controlling When and If a Delegate Fires Within a Multicast Delegate
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    3. 9.2 Obtaining Return Values from Each Delegate in a Multicast Delegate
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    4. 9.3 Handling Exceptions Individually for Each Delegate in a Multicast Delegate
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    5. 9.4 Converting Delegate Invocation from Synchronous to Asynchronous
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    6. 9.5 Wrapping Sealed Classes to Add Events
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    7. 9.6 Passing Specialized Parameters to and from an Event
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    8. 9.7 An Advanced Interface Search Mechanism
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    9. 9.8 An Advanced Member Search Mechanism
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    10. 9.9 Observing Additions and Modifications to a Hashtable
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    11. 9.10 Using the Windows Keyboard Hook
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    12. 9.11 Tracking and Responding to the Mouse
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    13. 9.12 Using Anonymous Methods
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    14. 9.13 Set Up Event Handlers Without the Mess
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    15. 9.14 Using Different Parameter Modifiers in Anonymous Methods
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    16. 9.15 Using Closures in C#
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    17. 9.16 Performing Multiple Operations on a List Using Functors
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
  14. Regular Expressions
    1. 10.0 Introduction
    2. 10.1 Enumerating Matches
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    3. 10.2 Extracting Groups from a MatchCollection
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    4. 10.3 Verifying the Syntax of a Regular Expression
      1. Problem
      2. Solution
      3. Discussion
    5. 10.4 Quickly Finding Only the Last Match in a String
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    6. 10.5 Replacing Characters or Words in a String
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    7. 10.6 Augmenting the Basic String Replacement Function
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    8. 10.7 Implementing a Better Tokenizer
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    9. 10.8 Compiling Regular Expressions
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    10. 10.9 Counting Lines of Text
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    11. 10.10 Returning the Entire Line in Which a Match Is Found
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    12. 10.11 Finding a Particular Occurrence of a Match
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    13. 10.12 Using Common Patterns
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    14. 10.13 Documenting Your Regular Expressions
      1. Problem
      2. Solution
      3. Discussion
    15. 10.14 Using Built-in Regular Expressions to Parse ASP.NET Pages
      1. Problem
      2. Solution
      3. Discussion
  15. Data Structures and Algorithms
    1. 11.0 Introduction
    2. 11.1 Creating a Hash Code for a Data Type
      1. Problem
      2. Solution
        1. The simple hash
        2. The folding hash
        3. The contained object cache
        4. The CryptoHash method
        5. The CryptoHash method using a nonstring
        6. The shift and add hash
        7. The calculated hash
        8. The string-concatenation hash
      3. Discussion
      4. See Also
    3. 11.2 Creating a Priority Queue
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    4. 11.3 Creating a Double Queue
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    5. 11.4 Determining Where Characters or Strings Do Not Balance
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    6. 11.5 Creating a One-to-Many Map (MultiMap)
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    7. 11.6 Creating a Binary Tree
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    8. 11.7 Creating an n-ary Tree
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    9. 11.8 Creating a Set Object
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
  16. Filesystem I/O
    1. 12.0 Introduction
    2. 12.1 Creating, Copying, Moving, or Deleting a File
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    3. 12.2 Manipulating File Attributes
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    4. 12.3 Renaming a File
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    5. 12.4 Determining Whether a File Exists
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    6. 12.5 Choosing a Method of Opening a File or Stream for Reading and/or Writing
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    7. 12.6 Accessing Part of a File Randomly
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    8. 12.7 Outputting a Platform-Independent EOL Character
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    9. 12.8 Creating, Writing to, and Reading from a File
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    10. 12.9 Determining Whether a Directory Exists
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    11. 12.10 Creating, Moving, or Deleting a Directory
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    12. 12.11 Manipulating Directory Attributes
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    13. 12.12 Renaming a Directory
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    14. 12.13 Searching for Directories or Files Using Wildcards
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    15. 12.14 Obtaining the Directory Tree
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    16. 12.15 Parsing a Path
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    17. 12.16 Parsing Paths in Environment Variables
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    18. 12.17 Verifying a Path
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    19. 12.18 Using a Temporary File in Your Application
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    20. 12.19 Opening a File Stream with Just a File Handle
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    21. 12.20 Writing to Multiple Output Files at One Time
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    22. 12.21 Launching and Interacting with Console Utilities
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    23. 12.22 Locking Subsections of a File
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    24. 12.23 Watching the Filesystem for Specific Changes to One or More Files or Directories
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    25. 12.24 Waiting for an Action to Occur in the Filesystem
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    26. 12.25 Comparing Version Information of Two Executable Modules
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    27. 12.26 Querying Information for All Drives on a System
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    28. 12.27 Encrypting/Decrypting an Existing File
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    29. 12.28 Compressing and Decompressing Your Files
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
  17. Reflection
    1. 13.0 Introduction
    2. 13.1 Listing Referenced Assemblies
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    3. 13.2 Listing Exported Types
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    4. 13.3 Finding Overridden Methods
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    5. 13.4 Finding Members in an Assembly
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    6. 13.5 Finding Members Within an Interface
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    7. 13.6 Determining and Obtaining Nested Types Within an Assembly
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    8. 13.7 Displaying the Inheritance Hierarchy for a Type
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    9. 13.8 Finding the Subclasses of a Type
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    10. 13.9 Finding All Serializable Types Within an Assembly
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    11. 13.10 Filtering Output When Obtaining Members
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    12. 13.11 Dynamically Invoking Members
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    13. 13.12 Providing Guidance to Obfuscators
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    14. 13.13 Determining if a Type or Method Is Generic
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    15. 13.14 Reading Manifest Resources Programmatically
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    16. 13.15 Accessing Local Variable Information
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    17. 13.16 Creating a Generic Type
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
  18. Web
    1. 14.0 Introduction
    2. 14.1 Converting an IP Address to a Hostname
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    3. 14.2 Converting a Hostname to an IP Address
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    4. 14.3 Parsing a URI
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    5. 14.4 Forming and Validating an Absolute URI
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    6. 14.5 Handling Web Server Errors
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    7. 14.6 Communicating with a Web Server
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    8. 14.7 Going Through a Proxy
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    9. 14.8 Obtaining the HTML from a URL
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    10. 14.9 Using the New Web Browser Control
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    11. 14.10 Tying Database Tables to the Cache
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    12. 14.11 Caching Data with Multiple Dependencies
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    13. 14.12 Prebuilding an ASP.NET Web Site Programmatically
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    14. 14.13 Escaping and Unescaping Data for the Web
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    15. 14.14 Using the UriBuilder Class
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    16. 14.15 Inspect and Change Your Web Application Configuration
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    17. 14.16 Working with HTML
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    18. 14.17 Using Cached Results When Working with HTTP for Faster Performance
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    19. 14.18 Checking out a Web Server’s Custom Error Pages
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    20. 14.19 Determining the Application Mappings for ASP.NET Set Up on IIS
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
  19. XML
    1. 15.0 Introduction
    2. 15.1 Reading and Accessing XML Data in Document Order
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    3. 15.2 Reading XML on the Web
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    4. 15.3 Querying the Contents of an XML Document
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    5. 15.4 Validating XML
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    6. 15.5 Creating an XML Document Programmatically
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    7. 15.6 Detecting Changes to an XML Document
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    8. 15.7 Handling Invalid Characters in an XML String
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    9. 15.8 Transforming XML
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    10. 15.9 Tearing Apart an XML Document
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    11. 15.10 Putting Together an XML Document
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    12. 15.11 Validating Modified XML Documents Without Reloading
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    13. 15.12 Extending XSLT Transformations
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    14. 15.13 Getting Your Schema in Bulk from Existing XML Files
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    15. 15.14 Passing Parameters to XSLT Transformations
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
  20. Networking
    1. 16.0 Introduction
    2. 16.1 Writing a TCP Server
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    3. 16.2 Writing a TCP Client
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    4. 16.3 Simulating Form Execution
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    5. 16.4 Downloading Data from a Server
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    6. 16.5 Using Named Pipes to Communicate
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    7. 16.6 Pinging Programmatically
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    8. 16.7 Send SMTP Mail Using the SMTP Service
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    9. 16.8 Check Out Your Network Connectivity
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    10. 16.9 Use Sockets to Scan the Ports on a Machine
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    11. 16.10 Use the Current Internet Connection Settings
      1. Problem
      2. Solution (1/2)
      3. Solution (2/2)
      4. Discussion
      5. See Also
    12. 16.11 Download a File Using FTP
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
  21. Security
    1. 17.0 Introduction
    2. 17.1 Controlling Access to Types in a Local Assembly
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    3. 17.2 Encrypting and Decrypting a String
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    4. 17.3 Encrypting and Decrypting a File
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    5. 17.4 Cleaning up Cryptography Information
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    6. 17.5 Verifying that a String Remains Uncorrupted Following Transmission
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    7. 17.6 Wrapping a String Hash for Ease of Use
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    8. 17.7 A Better Random Number Generator
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    9. 17.8 Storing Data Securely
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    10. 17.9 Making a Security Assert Safe
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    11. 17.10 Preventing Malicious Modifications to an Assembly
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    12. 17.11 Verifying That an Assembly Has Been Granted Specific Permissions
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    13. 17.12 Minimizing the Attack Surface of an Assembly
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    14. 17.13 Obtaining Security/Audit Information
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    15. 17.14 Granting/Revoking Access to a File or Registry Key
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    16. 17.15 Protecting String Data with Secure Strings
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    17. 17.16 Securing Stream Data
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    18. 17.17 Encrypting web.config Information
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    19. 17.18 Obtaining the Full Reason a SecurityException Was Thrown
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    20. 17.19 Achieving Secure Unicode Encoding
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    21. 17.20 Obtaining a Safer File Handle
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
  22. Threading and Synchronization
    1. 18.0 Introduction
    2. 18.1 Creating Per-Thread Static Fields
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    3. 18.2 Providing Thread-Safe Access to Class Members
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    4. 18.3 Preventing Silent Thread Termination
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    5. 18.4 Polling an Asynchronous Delegate
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    6. 18.5 Timing Out an Asynchronous Delegate
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    7. 18.6 Being Notified of the Completion of an Asynchronous Delegate
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    8. 18.7 Determining Whether a Request for a Pooled Thread Will be Queued
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    9. 18.8 Configuring a Timer
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    10. 18.9 Storing Thread-Specific Data Privately
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    11. 18.10 Granting Multiple Access to Resources with a Semaphore
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    12. 18.11 Synchronizing Multiple Processes with the Mutex
      1. Problem
      2. Solution
      3. Discussion (1/2)
      4. Discussion (2/2)
      5. See Also
    13. 18.12 Using Events to Make Threads Cooperate
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    14. 18.13 Get the Naming Rights for Your Events
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    15. 18.14 Performing Atomic Operations Among Threads
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
  23. Unsafe Code
    1. 19.0 Introduction
    2. 19.1 Controlling Changes to Pointers Passed to Methods
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    3. 19.2 Comparing Pointers
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    4. 19.3 Navigating Arrays
      1. Problem
      2. Solution
      3. See Also
    5. 19.4 Manipulating a Pointer to a Fixed Array
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    6. 19.5 Returning a Pointer to a Particular Element in an Array
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    7. 19.6 Creating and Using an Array of Pointers
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    8. 19.7 Switching Unknown Pointer Types
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    9. 19.8 Converting a String to a char*
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    10. 19.9 Declaring a Fixed-Size Structure with an Embedded Array
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
  24. Toolbox
    1. 20.0 Introduction
    2. 20.1 Dealing with Operating System Shutdown, Power Management, or User Session Changes
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    3. 20.2 Controlling a Service
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    4. 20.3 List What Processes an Assembly Is Loaded In
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    5. 20.4 Using Message Queues on a Local Workstation
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    6. 20.5 Finding the Path to the Current Framework Version
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    7. 20.6 Determining the Versions of an Assembly That Are Registered in the Global Assembly Cache (GAC)
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    8. 20.7 Getting the Windows Directory
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    9. 20.8 Capturing Output from the Standard Output Stream
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    10. 20.9 Running Code in Its Own AppDomain
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
    11. 20.10 Determining the Operating System and Service Pack Version of the Current Operating System
      1. Problem
      2. Solution
      3. Discussion
      4. See Also
  25. Index (1/10)
  26. Index (2/10)
  27. Index (3/10)
  28. Index (4/10)
  29. Index (5/10)
  30. Index (6/10)
  31. Index (7/10)
  32. Index (8/10)
  33. Index (9/10)
  34. Index (10/10)

Product information

  • Title: C# Cookbook, 2nd Edition
  • Author(s): Jay Hilyard, Stephen Teilhet
  • Release date: January 2006
  • Publisher(s): O'Reilly Media, Inc.
  • ISBN: 9780596518677