Extension method not found
我有一个控制台应用程序的单一模块,在单独的
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 | using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace DataProcessor { using Extensions; class Program { public static int Main(string[] Args) { for (int CtrA = 0; CtrA <= 100; CtrA++) { System.Diagnostics.Debug.Print((CtrA + 1).Ordinal); // Error occurs here } } } } namespace Extensions { public static class Extensions { public static string Ordinal(int Number) { string Str = Number.ToString(); Number = Number % 100; if ((Number >= 11) && (Number <= 13)) { Str +="th"; } else { switch (Number % 10) { case 1: Str +="st"; break; case 2: Str +="nd"; break; case 3: Str +="rd"; break; default: Str +="th"; break; } } return Str; } } |
我在
"int"不包含"ordinal"的定义,并且找不到接受"int"类型的第一个参数的扩展方法"ordinal"(是否缺少using指令或程序集引用?)
有人能告诉我我做错了什么吗?
您的方法不是扩展方法。在第一次辩论之前,它错过了
1 | public static string Ordinal(this int Number) |
Their first parameter specifies which type the method operates on, and the parameter is preceded by the
this modifier.from Extension Methods (C# Programming Guide)
您需要像这样更改函数:
1 | public static string Ordinal(this int Number) |
注意
您必须在任何参数之前添加
1 | public static string Ordinal(this int Number) |
它们的第一个参数指定该方法对哪种类型进行操作,并且该参数前面是该修饰符。只有在使用using指令将命名空间显式导入源代码时,扩展方法才在作用域中。
你忘了这个。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | namespace Extensions { public static class Extensions { public static string Ordinal(this int Number) { string Str = Number.ToString(); Number = Number % 100; if ((Number >= 11) && (Number <= 13)) { Str +="th"; } else { switch (Number % 10) { case 1: Str +="st"; break; case 2: Str +="nd"; break; case 3: Str +="rd"; break; default: Str +="th"; break; } } return Str; } } |