【问题标题】:Extension Methods. Error No overload for method 'WriteTextToConsole' takes 1 arguments扩展方法。错误“WriteTextToConsole”方法没有重载需要 1 个参数
【发布时间】:2013-11-19 14:14:32
【问题描述】:

我正在学习 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);
  }
}

【问题讨论】:

  • 第一个参数是字符串本身,在您的示例中为 str。您的扩展方法需要两个字符串参数才能编译。

标签: c# methods parameters this extension-methods


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    当您在字符串上调用扩展方法时,“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) 一起保留,如果您在两种情况下都希望在控制台中显示字符串(只需删除其上方的返回和控制台写入行),则可以重写它。

    【讨论】:

      猜你喜欢
      • 2022-01-04
      • 2012-02-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-14
      • 1970-01-01
      相关资源
      最近更新 更多