[ Team LiB ] Previous Section Next Section

• Table of Contents
• Index
• Reviews
• Reader Reviews
• Errata
• Academic
C# Cookbook
By Jay Hilyard, Stephen Teilhet
Publisher: O'Reilly
Pub Date: January 2004
ISBN: 0-596-00339-0
Pages: 800

      Who This Book Is For
      What You Need to Use This Book
      How This Book Is Organized
      What Was Left Out
      Conventions Used in This Book
      About the Code
      Using Code Examples
      Platform Notes
      Comments and Questions
      Chapter 1.  Numbers
      Recipe 1.1.  Determining Approximate Equality Between a Fraction and Floating-Point Value
      Recipe 1.2.  Converting Degrees to Radians
      Recipe 1.3.  Converting Radians to Degrees
      Recipe 1.4.  Using the Bitwise Complement Operator with Various Data Types
      Recipe 1.5.  Test for an Even or Odd Value
      Recipe 1.6.  Obtaining the Most- or Least-Significant Bits of a Number
      Recipe 1.7.  Converting a Number in Another Base to Base10
      Recipe 1.8.  Determining Whether a String Is a Valid Number
      Recipe 1.9.  Rounding a Floating-Point Value
      Recipe 1.10.  Different Rounding Algorithms
      Recipe 1.11.  Converting Celsius to Fahrenheit
      Recipe 1.12.  Converting Fahrenheit to Celsius
      Recipe 1.13.  Safely Performing a Narrowing Numeric Cast
      Recipe 1.14.  Finding the Length of Any Three Sidesof a Right Triangle
      Recipe 1.15.  Finding the Angles of a Right Triangle
      Chapter 2.  Strings and Characters
      Recipe 2.1.  Determining the Kind of Character
      Recipe 2.2.  Determining Whether a Character Is Within a Specified Range
      Recipe 2.3.  Controlling Case Sensitivity when Comparing Two Characters
      Recipe 2.4.  Finding All Occurrences of a Character Within a String
      Recipe 2.5.  Finding the Location of All Occurrencesof a String Within Another String
      Recipe 2.6.  The Poor Man's Tokenizer
      Recipe 2.7.  Controlling Case Sensitivity when Comparing Two Strings
      Recipe 2.8.  Comparing a String to the Beginning or End of a Second String
      Recipe 2.9.  Inserting Text into a String
      Recipe 2.10.  Removing or Replacing Characters Within a String
      Recipe 2.11.  Encoding Binary Data as Base64
      Recipe 2.12.  Decoding a Base64-Encoded Binary
      Recipe 2.13.  Converting a String Returned as a Byte[ ] Back into a String
      Recipe 2.14.  Passing a String to a Method that Accepts Only a Byte[ ]
      Recipe 2.15.  Converting Strings to Their Equivalent Value Type
      Recipe 2.16.  Formatting Data in Strings
      Recipe 2.17.  Creating a Delimited String
      Recipe 2.18.  Extracting Items from a Delimited String
      Recipe 2.19.  Setting the Maximum Number of Characters a String Can Contain
      Recipe 2.20.  Iterating Over Each Character in a String
      Recipe 2.21.  Improving String Comparison Performance
      Recipe 2.22.  Improving StringBuilder Performance
      Recipe 2.23.  Pruning Characters from the Headand/or Tail of a String
      Chapter 3.  Classes and Structures
      Recipe 3.1.  Creating Union-Type Structures
      Recipe 3.2.  Allowing a Type to Represent Itself as a String
      Recipe 3.3.  Converting a String Representation of an Object into an Actual Object
      Recipe 3.4.  Polymorphism via Concrete or Abstract Base Classes
      Recipe 3.5.  Making a Type Sortable
      Recipe 3.6.  Making a Type Searchable
      Recipe 3.7.  Indirectly Overloading the +=, -=, /=, and *= Operators
      Recipe 3.8.  Indirectly Overloading the &&, ||, and ?: Operators
      Recipe 3.9.  Improving the Performance of a Structure's Equals Method
      Recipe 3.10.  Turning Bits On or Off
      Recipe 3.11.  Making Error-Free Expressions
      Recipe 3.12.  Minimizing (Reducing) Your Boolean Logic
      Recipe 3.13.  Converting Between Simple Types in a Language Agnostic Manner
      Recipe 3.14.  Determining Whether to Use theCast Operator, the as Operator, or theis Operator
      Recipe 3.15.  Casting with the as Operator
      Recipe 3.16.  Determining a Variable's Type with the is Operator
      Recipe 3.17.  Polymorphism via Interfaces
      Recipe 3.18.  Calling the Same Method on Multiple Object Types
      Recipe 3.19.  Adding a Notification Callback Using an Interface
      Recipe 3.20.  Using Multiple Entry Points toVersion an Application
      Recipe 3.21.  Preventing the Creation of an Only Partially Initialized Object
      Recipe 3.22.  Returning Multiple Items from a Method
      Recipe 3.23.  Parsing Command-Line Parameters
      Recipe 3.24.  Retrofitting a Class to Interoperate with COM
      Recipe 3.25.  Initializing a Constant Field at Runtime
      Recipe 3.26.  Writing Code that Is Compatible with the Widest Range of Managed Languages
      Recipe 3.27.  Implementing Nested foreach Functionality in a Class
      Recipe 3.28.  Building Cloneable Classes
      Recipe 3.29.  Assuring an Object's Disposal
      Recipe 3.30.  Releasing a COM Object ThroughManaged Code
      Recipe 3.31.  Creating an Object Cache
      Recipe 3.32.  The Single Instance Object
      Recipe 3.33.  Choosing a Serializer
      Recipe 3.34.  Creating Custom Enumerators
      Recipe 3.35.  Rolling Back Object Changes
      Recipe 3.36.  Disposing of Unmanaged Resources
      Recipe 3.37.  Determining Where Boxing and Unboxing Occur
      Chapter 4.  Enumerations
      Recipe 4.1.  Displaying an Enumeration Value as a String
      Recipe 4.2.  Converting Plain Text to an Equivalent Enumeration Value
      Recipe 4.3.  Testing for a Valid Enumeration Value
      Recipe 4.4.  Testing for a Valid Enumeration of Flags
      Recipe 4.5.  Using Enumerated Members in a Bitmask
      Recipe 4.6.  Determining Whether One or More Enumeration Flags Are Set
      Chapter 5.  Exception Handling
      Recipe 5.1.  Verifying Critical Parameters
      Recipe 5.2.  Indicating Where Exceptions Originate
      Recipe 5.3.  Choosing when to Throw a Particular Exception
      Recipe 5.4.  Handling Derived Exceptions Individually
      Recipe 5.5.  Assuring Exceptions are Not Lost when Using Finally Blocks
      Recipe 5.6.  Handling Exceptions Thrown from Methods Invoked via Reflection
      Recipe 5.7.  Debugging Problems whenLoading an Assembly
      Recipe 5.8.  HRESULT-Exception Mapping
      Recipe 5.9.  Handling User-Defined HRESULTs
      Recipe 5.10.  Preventing Unhandled Exceptions
      Recipe 5.11.  Displaying Exception Information
      Recipe 5.12.  Getting to the Root of a Problem Quickly
      Recipe 5.13.  Creating a New Exception Type
      Recipe 5.14.  Obtaining a Stack Trace
      Recipe 5.15.  Breaking on a First Chance Exception
      Recipe 5.16.  Preventing the Nefarious TypeInitializationException
      Recipe 5.17.  Handling Exceptions Thrown from an Asynchronous Delegate
      Chapter 6.  Diagnostics
      Recipe 6.1.  Controlling Tracing Output inProduction Code
      Recipe 6.2.  Providing Fine-Grained Control Over Debugging/Tracing Output
      Recipe 6.3.  Creating Your Own Custom Switch Class
      Recipe 6.4.  A Custom Trace Class that Outputs Information in an XML Format
      Recipe 6.5.  Conditionally Compiling Blocks of Code
      Recipe 6.6.  Determining Whether a Process Has Stopped Responding
      Recipe 6.7.  Using One or More Event Logs in Your Application
      Recipe 6.8.  Changing the Maximum Size of a Custom Event Log
      Recipe 6.9.  Searching Event Log Entries
      Recipe 6.10.  Watching the Event Log for a Specific Entry
      Recipe 6.11.  Finding All Sources Belonging to a Specific Event Log
      Recipe 6.12.  Implementing a Simple Performance Counter
      Recipe 6.13.  Implementing Performance Counters that Require a Base Counter
      Recipe 6.14.  Enable/Disable Complex Tracing Code
      Chapter 7.  Delegates and Events
      Recipe 7.1.  Controlling when and if a Delegate Fires Within a Multicast Delegate
      Recipe 7.2.  Obtaining Return Values from Each Delegate in a Multicast Delegate
      Recipe 7.3.  Handling Exceptions Individually for Each Delegate in a Multicast Delegate
      Recipe 7.4.  Converting a Synchronous Delegate to an Asynchronous Delegate
      Recipe 7.5.  Adding Events to a Sealed Class
      Recipe 7.6.  Passing Specialized Parameters to and from an Event
      Recipe 7.7.  An Advanced Interface Search Mechanism
      Recipe 7.8.  An Advanced Member Search Mechanism
      Recipe 7.9.  Observing Additions and Modifications to a Hashtable
      Recipe 7.10.  Using the Windows Keyboard Hook
      Recipe 7.11.  Using Windows Hooks to Manipulate the Mouse
      Chapter 8.  Regular Expressions
      Recipe 8.1.  Enumerating Matches
      Recipe 8.2.  Extracting Groups from a MatchCollection
      Recipe 8.3.  Verifying the Syntax of a Regular Expression
      Recipe 8.4.  Quickly Finding Only the Last Match in a String
      Recipe 8.5.  Replacing Characters or Words in a String
      Recipe 8.6.  Augmenting the Basic String Replacement Function
      Recipe 8.7.  A Better Tokenizer
      Recipe 8.8.  Compiling Regular Expressions
      Recipe 8.9.  Counting Lines of Text
      Recipe 8.10.  Returning the Entire Line in Which a Match Is Found
      Recipe 8.11.  Finding a Particular Occurrence of a Match
      Recipe 8.12.  Using Common Patterns
      Recipe 8.13.  Documenting Your Regular Expressions
      Chapter 9.  Collections
      Recipe 9.1.  Swapping Two Elements in an Array
      Recipe 9.2.  Quickly Reversing an Array
      Recipe 9.3.  Reversing a Two-Dimensional Array
      Recipe 9.4.  Reversing a Jagged Array
      Recipe 9.5.  A More Flexible StackTrace Class
      Recipe 9.6.  Determining the Number of Times an Item Appears in an ArrayList
      Recipe 9.7.  Retrieving All Instances of a Specific Itemin an ArrayList
      Recipe 9.8.  Inserting and Removing Items from an Array
      Recipe 9.9.  Keeping Your ArrayList Sorted
      Recipe 9.10.  Sorting a Hashtable's Keys and/or Values
      Recipe 9.11.  Creating a Hashtable with Max and Min Size Boundaries
      Recipe 9.12.  Creating a Hashtable with Max and Min Value Boundaries
      Recipe 9.13.  Displaying an Array's Data as a Delimited String
      Recipe 9.14.  Storing Snapshots of Lists in an Array
      Recipe 9.15.  Creating a Strongly Typed Collection
      Recipe 9.16.  Persisting a Collection Between Application Sessions
      Chapter 10.  Data Structures and Algorithms
      Recipe 10.1.  Creating a Hash Code for a Data Type
      Recipe 10.2.  Creating a Priority Queue
      Recipe 10.3.  Creating a More Versatile Queue
      Recipe 10.4.  Determining Where Characters or Strings Do Not Balance
      Recipe 10.5.  Creating a One-to-Many Map (MultiMap)
      Recipe 10.6.  Creating a Binary Tree
      Recipe 10.7.  Creating an n-ary Tree
      Recipe 10.8.  Creating a Set Object
      Chapter 11.  Filesystem I/O
      Recipe 11.1.  Creating, Copying, Moving, and Deleting a File
      Recipe 11.2.  Manipulating File Attributes
      Recipe 11.3.  Renaming a File
      Recipe 11.4.  Determining Whether a File Exists
      Recipe 11.5.  Choosing a Method of Opening a File or Stream for Reading and/or Writing
      Recipe 11.6.  Randomly Accessing Part of a File
      Recipe 11.7.  Outputting a Platform-Independent EOL Character
      Recipe 11.8.  Create, Write to, and Read from a File
      Recipe 11.9.  Determining Whether a Directory Exists
      Recipe 11.10.  Creating, Moving, and Deleting a Directory
      Recipe 11.11.  Manipulating Directory Attributes
      Recipe 11.12.  Renaming a Directory
      Recipe 11.13.  Searching for Directories or FilesUsing Wildcards
      Recipe 11.14.  Obtaining the Directory Tree
      Recipe 11.15.  Parsing a Path
      Recipe 11.16.  Parsing Paths in Environment Variables
      Recipe 11.17.  Verifying a Path
      Recipe 11.18.  Using a Temporary File in Your Application
      Recipe 11.19.  Opening a File Stream with just aFile Handle
      Recipe 11.20.  Write to Multiple Output Files at One Time
      Recipe 11.21.  Launching and Interacting withConsole Utilities
      Recipe 11.22.  Locking Subsections of a File
      Recipe 11.23.  Watching the Filesystem for Specific Changes to One or More Files or Directories
      Recipe 11.24.  Waiting for an Action to Occurin the Filesystem
      Recipe 11.25.  Comparing Version Information of Two Executable Modules
      Chapter 12.  Reflection
      Recipe 12.1.  Listing Imported Assemblies
      Recipe 12.2.  Listing Exported Types
      Recipe 12.3.  Finding Overridden Methods
      Recipe 12.4.  Finding Members in an Assembly
      Recipe 12.5.  Finding Members Within an Interface
      Recipe 12.6.  Obtaining Types Nested Within a Type
      Recipe 12.7.  Displaying the Inheritance Hierarchy for a Type
      Recipe 12.8.  Finding the Subclasses of a Type
      Recipe 12.9.  Finding All Serializable Types Within an Assembly
      Recipe 12.10.  Controlling Additions to an ArrayList Through Attributes
      Recipe 12.11.  Filtering Output when Obtaining Members
      Recipe 12.12.  Dynamically Invoking Members
      Chapter 13.  Networking
      Recipe 13.1.  Converting an IP Address to a Hostname
      Recipe 13.2.  Converting a Hostname to an IP Address
      Recipe 13.3.  Parsing a URI
      Recipe 13.4.  Forming an Absolute URI
      Recipe 13.5.  Handling Web Server Errors
      Recipe 13.6.  Communicating with a Web Server
      Recipe 13.7.  Going Through a Proxy
      Recipe 13.8.  Obtaining the HTML from a URL
      Recipe 13.9.  Writing a TCP Server
      Recipe 13.10.  Writing a TCP Client
      Recipe 13.11.  Simulating Form Execution
      Recipe 13.12.  Downloading Data from a Server
      Recipe 13.13.  Using Named Pipes to Communicate
      Chapter 14.  Security
      Recipe 14.1.  Controlling Access to Types in aLocal Assembly
      Recipe 14.2.  Encrypting/Decrypting a String
      Recipe 14.3.  Encrypting and Decrypting a File
      Recipe 14.4.  Cleaning Up Cryptography Information
      Recipe 14.5.  Verifying that a String Is Uncorrupted During Transmission
      Recipe 14.6.  Wrapping a String Hash for Ease of Use
      Recipe 14.7.  A Better Random Number Generator
      Recipe 14.8.  Securely Storing Data
      Recipe 14.9.  Making a Security Assert Safe
      Recipe 14.10.  Preventing Malicious Modifications to an Assembly
      Recipe 14.11.  Verifying that an Assembly Has Been Granted Specific Permissions
      Recipe 14.12.  Minimizing the Attack Surface of an Assembly
      Chapter 15.  Threading
      Recipe 15.1.  Creating Per-Thread Static Fields
      Recipe 15.2.  Providing Thread Safe Access to Class Members
      Recipe 15.3.  Preventing Silent Thread Termination
      Recipe 15.4.  Polling an Asynchronous Delegate
      Recipe 15.5.  Timing Out an Asynchronous Delegate
      Recipe 15.6.  Being Notified of the Completionof an Asynchronous Delegate
      Recipe 15.7.  Waiting for Worker Thread Completion
      Recipe 15.8.  Synchronizing the Reading and Writingof a Resource Efficiently
      Recipe 15.9.  Determining Whether a Requestfor a Pooled Thread Will Be Queued
      Recipe 15.10.  Waiting for All Threads in theThread Pool to Finish
      Recipe 15.11.  Configuring a Timer
      Recipe 15.12.  Storing Thread-Specific Data Privately
      Chapter 16.  Unsafe Code
      Recipe 16.1.  Controlling Changes to Pointers Passedto Methods
      Recipe 16.2.  Comparing Pointers
      Recipe 16.3.  Navigating Arrays
      Recipe 16.4.  Manipulating a Pointer to a Fixed Array
      Recipe 16.5.  Returning a Pointer to a Particular Element in an Array
      Recipe 16.6.  Creating and Using an Array of Pointers
      Recipe 16.7.  Creating and Using an Array of Pointersto Unknown Types
      Recipe 16.8.  Switching Unknown Pointer Types
      Recipe 16.9.  Breaking Up Larger Numbers into Their Equivalent Byte Array Representation
      Recipe 16.10.  Converting Pointers to a Byte[ ], SByte[ ],or Char[ ] to a String
      Chapter 17.  XML
      Recipe 17.1.  Reading and Accessing XML Datain Document Order
      Recipe 17.2.  Reading XML on the Web
      Recipe 17.3.  Querying the Contents of an XML Document
      Recipe 17.4.  Validating XML
      Recipe 17.5.  Creating an XML Document Programmatically
      Recipe 17.6.  Detecting Changes to an XML Document
      Recipe 17.7.  Handling Invalid Characters in anXML String
      Recipe 17.8.  Transforming XML to HTML
      Recipe 17.9.  Tearing Apart an XML Document
      Recipe 17.10.  Putting Together an XML Document
[ Team LiB ] Previous Section Next Section