我读过很多书,有很多类似问题的答案,但即使遵循这些答案,我也无法让这个问题奏效。扩展方法是静态的,公共的,有this
,在同一个命名空间中,所以不需要导入。。。我错过了什么?我的C#不太好。
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());
...
输出:
isNegated
notNegated
先道歉,我知道这将是一些微不足道的事情,但我看不出什么。
编译器只有在找不到任何适用于方法调用的“常规”实例方法时才会查找扩展方法。在本例中,Object
类提供了一个ToString()
方法,因此这里有一个适当的方法,编译器使用的就是这个方法。
如果将扩展方法和调用代码中的ToString
更改为其他名称(例如ExtensionToString
),您将看到正在使用它。
将ToString函数替换为:
public static string ToString(this Neg n)
{
string res = "";
switch (n)
{
case Neg.isNegated:
res = "flowers";
break;
case Neg.notNegated:
res = "kittens";
break;
}
return res;
}