Erreur du compilateur CS0019

L’opérateur 'operator' ne peut pas être appliqué aux opérandes de type 'type' et 'type'

Un opérateur binaire s’applique à des types de données qui ne le prennent pas en charge. Par exemple, vous ne pouvez pas utiliser l’opérateur || sur des chaînes, vous ne pouvez pas utiliser les opérateurs +, -, < ou > sur des variables bool et vous ne pouvez pas utiliser l’opérateur == avec un type struct , sauf si le type surcharge explicitement cet opérateur.

Vous pouvez surcharger un opérateur afin qu’il prenne en charge les opérandes de certains types. Pour plus d’informations, consultez Surcharge d’opérateur.

Exemple 1

Dans l’exemple suivant, CS0019 est généré en trois emplacements, car bool en C# n’est pas convertible en int. CS0019 est également généré lorsque l’opérateur de soustraction - est appliqué à une chaîne. L’opérateur d’addition + peut être utilisé avec des opérandes de chaîne, car il est surchargé par la classe String pour permettre la concaténation de chaînes.

static void Main()
{
    bool result = true;
    if (result > 0) //CS0019
    {
        // Do something.
    }

    int i = 1;
    // You cannot compare an integer and a boolean value.
    if (i == true) //CS0019
    {
        //Do something...
    }

    string s = "Just try to subtract me.";
    float f = 100 - s; // CS0019
}

Exemple 2

Dans l’exemple suivant, la logique conditionnelle doit être spécifiée en dehors de ConditionalAttribute. Vous ne pouvez passer qu’un symbole prédéfini à ConditionalAttribute.

L’exemple suivant génère l’erreur CS0019 :

// CS0019_a.cs
// compile with: /target:library
using System.Diagnostics;

public class MyClass
{
   [ConditionalAttribute("DEBUG" || "TRACE")]   // CS0019
   public void TestMethod() {}

   // OK
   [ConditionalAttribute("DEBUG"), ConditionalAttribute("TRACE")]
   public void TestMethod2() {}
}

Voir aussi