C# 无法将方法组转换为布尔值

本文关键字:转换 布尔值 方法 | 更新日期: 2023-09-27 18:22:45

      public void nbOccurences(int[] base1, int n, int m)
     {
         foreach (int i in base1)
         {
             if (n == 32)
             {
                 m++;
             }
         }
     }
    static void Main(string[] args)
    {
        int chiffrebase = 32;
        int occurence = 0;
        int[] test123 = new int[] { 12, 32, 33, 64, 75, 46, 42, 32 };
        Program n1 = new Program();
        n1.nbOccurences(test123, chiffrebase, occurence);
        Console.WriteLine(nbOccurences);
    }

我不断收到"无法从方法组转换为布尔值"消息,是什么导致了问题?我正在尝试使用我在主程序中制作的方法。

C# 无法将方法组转换为布尔值

Console.WriteLine(nbOccurences);

nbOccurrences是一个mehtod(顺便说一下,返回虚空(。所以编译器抱怨说"我需要在writeline上打印一些东西,也许你想让我打印一个布尔值,但我无法将方法转换为布尔值">

此外,您的nbOccurrences似乎没有任何用处:它迭代数组,检查某些条件并最终增加参数值。但是调用代码不会知道 m 值,该值仍保留在函数内部。您应该更改返回int的方法声明(或使用out int m参数,这不是我的选择(

这是我对你实际目标的最佳猜测:

public int nbOccurrences(int[] base1, int n)
{
   int count = 0;
   foreach (int i in base1)
   {
      if (n == 32)
      {
         count++;
      }
   }
   return count;
}
static void Main(string[] args)
{
    int chiffrebase = 32;
    int[] test123 = new int[] { 12, 32, 33, 64, 75, 46, 42, 32 };
    int occurrences = nbOccurrences(test123, chiffrebase, occurrence);
    Console.WriteLine(occurrences);
}

您的方法以前nbOccurrences没有返回任何内容,那么如何使用它来执行任何操作?一种方法可以使用outref参数通过参数从方法中获取值,但在您更加专业之前,您不应该这样做

WriteLine 方法是查找可以转换为字符串或在其上运行ToString string或内容。相反,你给它指定了一个方法的名称(不是方法调用的结果,而是方法本身(。它怎么知道该怎么做呢?

使用括号调用方法,因此请注意nbOccurrencesnbOccurrences()不是一回事。

最后,我赌你不需要new Program.它有效,但可能不是您想要的。相反,只需调用与您正在运行的程序相同的当前程序中的方法,Program

最后,虽然这在 C# 旅程中可能还为时过早,但请注意,可以通过这种方式执行相同的任务(添加using System.Linq;(:

static void Main(string[] args)
{
    int chiffrebase = 32;
    int[] test123 = new int[] { 12, 32, 33, 64, 75, 46, 42, 32 };
    int occurrences = test123.Count(i => i == chiffrebase);
    Console.WriteLine(occrurences);
}

附言:出现次数用两个卢比拼写,而不是一个。

Console.WriteLine 函数有许多重载,其中一个是期望将布尔值作为参数。当你调用这样的函数时

 Console.WriteLine(1); 

编译器确定要调用的函数版本(在上面的示例中,它应该是 int 版本。

在示例代码中,只需添加一些括号,以便在要调用函数时如下所示。值得注意的是,您的 nbOccurrences 函数实际上并没有返回一个值(它的返回类型是 void(,因此这仍然可能会失败。

Console.WriteLine(nbOccurences());