C# 7: Ref Returns, Ref Locals, and how to use them

C# has always supported the ability to pass by reference using the ref keyword on method parameters. C# 7 adds the ability to return by reference and to store references in local variables.

The primary reason for using ref returns and ref locals is performance. If you have big structs, you can now reference these directly in safe code to avoid copying. Before C# 7 you had …

Read More

C# 7: Dynamic types and Reflection cannot access Tuple fields by name

Tuples are a great new feature in C# 7 and I've used them a few times already. The syntax is great, they're easy to use, and they're a whole lot better than the alternatives.

Tuples are implemented using ValueTuple, with name erasure at runtime

Read More

C# 7: Local Functions are Funcs too

Local functions in C# 7 are versatile: they can be passed as Func<> and Action<> to other methods and they can be defined using the inline expression bodied syntax.

Because local functions are compiled into static methods, you should be able to pass them to any method that requires a Func<> or Action<> and sure …

Read More

C# 7: Dissecting Local Functions to understand how they capture local variables

One of the new language features in C# 7 is local functions. This feature lets you define functions within the scope of other functions. The main benefit of local functions is encapsulation and a secondary benefit is that they bring local variables into scope.

Although local functions appear simple, their interaction with other language features quickly leads to questions. I wondered …

Read More

How to set a custom Code Analysis Rule Set on an ASP.NET Core project

If you want to set a custom code analysis rule set on an ASP.NET Core project, there is currently no UI tooling in Visual Studio 2017 to support this scenario. However, you can add it manually to the csproj file.

To set a custom code analysis rule set on an ASP.NET Core project, right click on the project in solution explorer, select Edit <YourProjectName>.csproj

Read More

Favorite features in Visual Studio 2017

Visual Studio 2017 is now available, download it here. I've been converting my projects over to VS2017 and wanted to share my favorite features of the new IDE.

My favorites are Go To All, move type to matching file, string splitting, and coding conventions via EditorConfig. Other notable mentions are the overhauled Find All …

Read More

Gotchas with upgrading to Visual Studio 2017

While upgrading several projects to Visual Studio 2017 I was caught out by three gotchas: I was unable to push changes to remote Git repositories, I had ASP.NET Core applications failing under both Kestrel and IIS Express, and I had ASP.NET Core projects that stopped working under Visual Studio 2015.

This post documents these three issues and provides the solutions I used to work …

Read More

Gotchas with HttpClient's CancelPendingRequests and Timeout in .NET

HttpClient provides a convenient way to make web requests in .NET. But if you want to cancel all pending requests using CancelPendingRequests or use the Timeout functionality, you must be aware of the gotchas.

I recently encountered some strange behaviour where some requests were not cancelled when CancelPendingRequests was called and …

Read More

Gotchas with dynamically adding script tags to HTML

Sometimes you need to dynamically add a script tag to HTML. But there are some gotchas that might get you if you don't know to look out for them.

You might ask, why add scripts dynamically at all? Well, here's two reasons:

  1. When you don't know what to load until runtime.
  2. When you want to load scripts without blocking the page load.

I recently …

Read More

C# 7 Preview: Using tuples to return multiple values

Microsoft is hard at work on C# 7, the next version of C#. In this post, I'll look at tuples, one of the new features proposed for C# 7. So what are tuples, why do we need them, and how do they differ from what we have already.

Tuples are a way to temporarily group multiple values together. Currently, C# handles inputs and outputs asymmetrically. There is syntactic support for passing …

Read More