méthode d'extension sur enum non appelée [duplicate]
J'ai fait pas mal de lecture et il y a beaucoup de réponses à des questions très similaires, mais même en suivant celles-ci, je ne parviens pas à faire fonctionner cela. La méthode d'extension est statique, publique, a this, est dans le même espace de noms, donc ne devrait pas avoir besoin d'être importée ... qu'est-ce que je manque? Mon C # n'est pas génial.
namespace LDB
{
public enum Neg { isNegated, notNegated };
static class NegStringifier {
public static string ToString(this Neg n) {
string res = n switch {
Neg.isNegated => "flowers",
Neg.notNegated => "kittens",
//_ => null
};
return res;
}
}
public class Program
{
static void Main(string[] args)
{
System.Console.WriteLine(Neg.isNegated.ToString());
System.Console.WriteLine(Neg.notNegated.ToString());
...
production:
isNegated
notNegated
Toutes mes excuses, je sais que ça va être quelque chose de trivial mais je ne vois pas quoi.
Réponses
Le compilateur recherche uniquement les méthodes d'extension lorsqu'il ne trouve aucune méthode d'instance "régulière" applicable à l'appel de méthode. Dans ce cas, la objectclasse fournit une ToString()méthode, il existe donc une méthode appropriée, et c'est ce que le compilateur utilise.
Si vous passez ToStringà un autre nom (par exemple ExtensionToString) dans la méthode d'extension et le code d'appel, vous verrez qu'il est utilisé.