Tag: csharp

Decoupling – Making Your C# Program More Testable

 How and Why to Implement Decoupling Classes in Your Code Decoupling is a strategy for writing testable code when dealing with hard-to-test classes and it can be an incredibly powerful tool to help you write clean, effective and bug-free code. What Is Decoupling? Decoupling is a coding strategy that involves taking the key parts of […]

Securing Web APIs in .NET Core 2.2

Microsoft will simplify Web API authentication in a soon-to-be-released update! UPDATE: Michael Stokesbarry spoke at the Spokane .NET Users Group about the now released update. Click here for the video. This week’s release of ASP.NET 2.2 gave us some performance enhancements, ability to do health checks on the application and code analyzers to help you […]

Using Tuples for overriding Equality() and GetHashCode()

The implementation of Equals() and GetHashCode() used to be complex, but with C# 7.0 Tuples, the actual code is boilerplate. For Equals(): It’s necessary to compare all the contained identifying data structures while avoiding infinite recursion or null reference exceptions. For GetHashCode(): It’s necessary to combine the unique hash code of each of the non-null […]

Timers Prior to Async/Await Pattern of C# 5.0

There are multiple ways to use Task.Delay() when a timer is required. For scenarios prior to .NET 4.5, several timer classes are available, including System.Windows.Forms.Timer, System.Timers.Timer, and System.Threading.Timer. The development team designed System.Windows.Forms.Timer specifically for use within a rich client user interface. Programmers can drag it onto a form as a nonvisual control and regulate […]

Error: “Predefined type ‘System.ValueTuple’ is not defined or imported”

As soon as you start programming tuples in C# 7.0, you are likely to encounter the compiler error, “Predefined type ‘System.ValueTuple’ is not defined or imported.”   This issue is easily corrected. When encountered, the error will look like this on the code editor: The issue is that the C# 7.0 compiler is trying to […]

Generalized Async Return Types in C# 7.0

Ever since C# 5.0 when the async/await pattern was introduced, the only supported return types were Task<TResult>, Task, and void (the latter only in exceptional cases). The problem with this limitation is that on occasions when the result is known immediately, it is still necessary to proceed with the formality of instantiating a Task even though […]

Implementing an Implicit Conversion With C# 7.0 Deconstructors

While the deconstruct syntax is interesting for its convenience in assigning to a set of variables, what I believe has far broader implications is its potential to provide an “implicit conversion operator” and in a syntax that, quite frankly, is far easier to recall than the implicit cast operator.  For example, I can provide deconstructors […]

Deterministic Finalization with IDisposable and the Using Statement

The problem with finalizers on their own is that they don’t support deterministic finalization (the ability to know when a finalizer will run). Rather, finalizers serve the important role of being a backup mechanism for cleaning up resources if a developer using a class neglects to call the requisite cleanup code explicitly. For example, consider […]

Guidelines for Exception Handling in C#

The following is a list of C# Exceptions Handling Guidelines taken from Essential C# by Mark Michaelis. Exception handling provides much-needed structure to the error-handling mechanisms that preceded it. However, it can still lead to some unwieldy results if used haphazardly. The following guidelines offer some best practices for exception handling. Catch only the exceptions […]