82 votes

Qu'est-ce qu'un double point d'exclamation en C# ?

De https://source.dot.net/#System.Private.CoreLib/Hashtable.cs,475 :

public virtual bool ContainsKey(object key!!)

Cela ressemble à deux opérateurs de renonciation à la nullité. Existe-t-il un document à ce sujet ?

113voto

canton7 Points 486

Il s'agit d'une syntaxe de vérification des paramètres nuls introduite dans C# 11.

La proposition est ici et le PR fait un premier déploiement vers le runtime. est ici .

La syntaxe :

public void Foo(string bar!!)
{
}

Est à peu près équivalent à :

public void Foo(string bar)
{
    if (bar is null)
    {
        throw new ArgumentNullException(nameof(bar));
    }
}

... bien que l'implémentation réelle utilise une aide de type throw, Voir sur SharpLab .

2voto

Stas Sorokin Points 151

La nouvelle fonctionnalité de vérification des paramètres nuls en C# 11 !!

Le double point d'exclamation !! est un fonction de vérification des paramètres nuls qui remplace le contrôle nul suivant (plus ancien) :

void Bar(object arg)
{
    if (arg is null)
    {
        throw new ArgumentNullException(nameof(arg));
    }
    Console.WriteLine("Hi");
    // use arg...
}

Avec ce nouveau mode de contrôle des nullités, le même code est beaucoup plus court :

void Bar(object arg!!)
{
    Console.WriteLine("Hi");
    // use arg...
}

Ces deux méthodes (ainsi que la suivante) lancent un ArgumentNullException si le paramètre est null

Élaboration

En gros, en utilisant ce code, vous vous assurez que object arg n'est pas null

Une autre façon : ArgumentNullException.ThrowIfNull(parameter)

editar: cette méthode statique est introduite dans C# 10 (.NET 6) et dépend de la version 6 de .NET

Avec les dernières instructions PR, cette méthode est utilisée dans les endroits où les !! n'est pas possible :

ArgumentNullException.ThrowIfNull est utilisé dans les cas suivants !! n'est pas possible, mais l'appel de la méthode est

Exemple de code :

void Greeting(string name)
{
    ArgumentNullException.ThrowIfNull(name);
    Console.WriteLine($"Hi {name}");
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X