C# Cookbook |
By Jay Hilyard, Stephen Teilhet |
|
Publisher | : O'Reilly |
Pub Date | : January 2004 |
ISBN | : 0-596-00339-0 |
Pages | : 800 |
|
| Dedication |
| | Copyright |
| | Preface |
| | | 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 |
| | | Acknowledgments |
|
| | 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 |
|
| | Colophon |
| | Index |