最佳重载方法匹配...有一些无效的参数 C#

本文关键字:无效 参数 重载 方法 最佳 | 更新日期: 2023-09-27 18:09:24

public static void masodmegold(double a,double b,double c)
{
     double x0, x1, x2;
     double gyokalatt = b * b - 4 * a * c;
     if (gyokalatt > 0)
     {
          x1 = ( -b + Math.Sqrt(gyokalatt)) / (2 * a);
          x2 = ( -b - Math.Sqrt(gyokalatt)) / (2 * a);
          Console.WriteLine("két gyök: ", x1, x2);
     }
     else if (gyokalatt == 0)
     {
          x0 = ( -b / (2 * a));
          Console.WriteLine("egy gyök: ", x0);
     }
     else 
     {
          Console.WriteLine("blabla!");    
     }
}
static void Main(string[] args)
{
     Console.WriteLine(masodmegold(1,-4,3));
     Console.ReadKey();
}

并且有两个错误

错误 1

最佳重载方法匹配 'System.Console.WriteLine(字符串, 参数对象[](' 有一些无效的参数

错误 2

参数 1:无法从"void"转换为"字符串">

最佳重载方法匹配...有一些无效的参数 C#

你的masodmegold方法返回void,请参阅public static void masodmegold要么需要将返回类型void更改为某些内容

public static string masodmegold(double a,double b,double c)
{ 
 //Your code here 
 //change  Console.WriteLine("két gyök: ", x1, x2); to Cnsole.WriteLine("két gyök: "+ x1+""+ x2);
 return "Some string you want to print"
}

或者主要你可以像直接调用它一样,而无需更改其返回类型,

masodmegold(1,-4,3)

Console.writeline()需要一个参数,则传递返回类型为 void 的masodmegold(1,-4,3),这等效于 Console.writeline(void) 。所以你得到错误。

以下是导致编译错误的行:

Console.WriteLine(masodmegold(1,-4,3));

它应该只是

masodmegold(1,-4,3);

您的 masodmegold 方法具有类型 void,因此它不会返回任何 - 因此在此方法执行后,您没有任何东西要传递给ConsoleWriteLine

您应该只调用方法本身,而不将其作为参数传递给Console.WriteLine

错误 1你构建字符串的方式是错误的,请尝试这样的事情:

Console.WriteLine("két gyök: " + x1 + " " + x2);

您也可以查看字符串。格式方法。

错误 2主要方法:

static void Main(string[] args)
{
    masodmegold(1,-4,3);
    Console.ReadKey();
}
Console.WriteLine("egy gyök: ", x0);

我们可以这样做:

Console.WriteLine("egy gyök: {0}", x0);

这一行:

Console.WriteLine(masodmegold(1,-4,3));

我们应该知道该方法masodmegold什么都不返回,因为程序不知道哪个与名为WriteLine的方法匹配。

您的masodmegold具有 void 类型,它不返回任何内容。所以试试这个:

static void Main(string[] args)
{
     masodmegold(1, -4, 3);
     Console.ReadKey();
}

同样在这一行中:

else if (gyokalatt == 0)
{
     x0 = ( -b / (2 * a));
     Console.WriteLine("egy gyök: ", x0);
} 

浮点与等式运算符的比较可能会在舍入值时损失精度,最好这样使用:

else if (Math.Abs(gyokalatt) < 0.001)
{
   ....
}