扩展方法。错误没有方法'WriteTextToConsole'的重载需要1个参数

时间:2013-11-19 14:14:32

标签: c# methods parameters this extension-methods

我正在学习C#和C,这个C#代码给了我一个我不明白的错误。我正在阅读有关扩展方法的内容,这段代码给出了错误:方法'WriteTextToConsole'没有重载需要1个参数。如您所见,它只需要1个参数?我创建变量c和count只是为了能够构造字符串对象。所以我可以在String类中尝试扩展。是否正确理解您创建扩展方法的方式:是在参数前面加上“this”关键字,参数是要扩展的类的类型?

代码在这里:

        Console.WriteLine();
        M.WriteTextToConsole("Hello, world. Programming in C# is fun");
        char c = 'A';
        int count = 14;
        String str = new String(c, count);
        str.WriteTextToConsole("This is a string");

方法在这里:

static class M
{
  public static void WriteTextToConsole(this string text)
  {
      Console.WriteLine(text);
  }
}

2 个答案:

答案 0 :(得分:7)

您需要将其称为str.WriteTextToConsole();。在这种情况下,str将作为单个参数传递给M.WriteTextToConsole()方法

答案 1 :(得分:1)

当你在字符串上调用扩展方法时,“this string text”参数引用字符串本身,例如,如果它是“this Bitmap b”,那么它将是位图的扩展方法并假设你创建了一个名为bit的位图对象,调用将是bit.WriteTextToConsole()。如果您想要其他参数,您需要将这些参数添加到方法声明中,并且这样做是调用者的一个选项。 params关键字如此:

    static class M
    {
        public static void WriteTextToConsole(this string text,params string[] str)
        {
            if (str.Length > 0)
            {
                //do something with extra string or strings
                //you can make params Object[] but for this
                //example i choose string[]
                Console.WriteLine(text);
                return;
            }

            Console.WriteLine(text);
        }
    }

请注意,this关键字必须是第一个参数,请参阅您要扩展的类型。 在有可选字符串的情况下,我将代码保留为重复的console.WriteLine(text),如果你在两种情况下想要在控制台中显示字符串(只需删除它上面的return和console writeline),你就可以重写它。