How to Use C# 9 in Xamarin.Forms Projects Today

September 29, 2020

.NET 5 is around the corner. It brings a plethora of good stuff, but what makes me excited the most are the new C# features: records and more advanced pattern matching. The record keyword facilitates the usage of immutable state, and I really wanted to use it.

But no matter what I’ve tried, setting TFM to .NET 5 didn’t work for me on Mac. No worries, as it turned out C# 9 can be used today with .NET Standard projects!

Here’s how:

  • Switch Visual Studio for Mac to Preview channel
  • Create a new Xamarin.Forms project
  • In the library project change the TFM to .NETStandard2.1, language version to 9:

  • Add the following code:

    // Without this dummy class C#9's records won't compile
    namespace System.Runtime.CompilerServices
    public static class IsExternalInit

YMMV, but it works on my machine with the following configuration:

  • macOS Catalina 10.15.6
  • Xcode 12.0
  • Visual Studio Community for Mac 8.8 Preview (8.8 build 2120)
  • Mono
  • Roslyn 3.8.0-2.20414.4
  • .NET Core SDK 3.1.402
  • Xamarin.iOS
  • Xamarin.Android

Alas, Rider 2020.3 EAP 1 chokes on records. VSfM and VS Code are fine with it.