Nouveauté C# 11 prévue !

En effet il est apparu une nouvelle pull request est apparue sur le repository Github de Donet qui va créer une nouvelle petite révolution.

Cette PR consiste à vérifier la nullité d’un paramètre directement à l’exécution.

Voici un exemple de ce que nous faisons aujourd’hui :

void DoSomething(object param)
{
    if (arg is null)
    {
        throw new ArgumentNullException(nameof(arg));
    }
    ...
}

Et voici ce que propose la PR :

void DoSomething(object param!!)
{
    ...
}

Ici nous voyons « !! » derrière le paramètre ce qui va indiquer que nous souhaitons vérifier la nullité de notre paramètre et du coup le compilateur va générer du coup le code associé à tout celà comme suit :

using System;
using System.Diagnostics;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Security;
using System.Security.Permissions;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("0.0.0.0")]
[module: UnverifiableCode]
public class C
{
    public void DoSomething(string param)
    {
        <PrivateImplementationDetails>.ThrowIfNull(param, "param");
    }
}
[CompilerGenerated]
internal sealed class <PrivateImplementationDetails>
{
    internal static void Throw(string paramName)
    {
        throw new ArgumentNullException(paramName);
    }

    internal static void ThrowIfNull(object argument, string paramName)
    {
        if (argument == null)
        {
            Throw(paramName);
        }
    }
}

Personnellement je pense que la feature était nécessaire pour la productivité et la lisibilité du code en évitant de polluer son code avec quelque chose d’assez trivial.

Vous pouvez consulter la PR ici : https://github.com/dotnet/csharplang/issues/2145

Have fun coding ! 😎