不能隐式地将void类型转换为int类型

本文关键字:类型转换 int 类型 void 不能 | 更新日期: 2023-09-27 18:18:06

我正在为一个现有项目创建一个单元测试。

  • n1n2为输入数字
  • op是主程序中开关情况下的操作数

问题是与actual。我无法匹配期望值和实际值,因为我得到错误cannot implicitly convert void to int

我的单元测试:
[TestMethod()]
public void docalcTest(int actual)
{
    Form1 target = new Form1(); // TODO: Passenden Wert initialisieren
    double n1 = 15; // TODO: Passenden Wert initialisieren
    double n2 = 3; // TODO: Passenden Wert initialisieren
    int op = 2; // TODO: Passenden Wert initialisieren
    int expected = 5;
    actual = target.docalc(n1, n2, op);
    Assert.AreEqual(expected,actual);
}

docalc:

public void docalc(double n1, double n2, int op)
{
    result = 0;
    setText("clear");
    switch (op)
    {
        case 1:
            result = n1 + n2;
            break;
        case 2:
            result = n1 - n2;
            break;
        case 3:
            result = n1 * n2;
            break;
        case 4:
            result = n1 / n2;
            break;
    }
    setText(result.ToString());
}

不能隐式地将void类型转换为int类型

你的方法target.docalc()是一个void方法,而actual是一个int。你不能像编译器说的那样把void赋值给int

根据你的评论(你真的应该编辑你的问题),你的docalc()看起来像这样:

public void docalc(double n1, double n2, int op) 
{   
    result = 0; 
    ...
    setText(result.ToString());
}

您必须将方法的返回类型更改为int,并返回结果:

public int docalc(double n1, double n2, int op) 
{   
    int result = 0; 
    ...
    return result;
}

旁注,你为什么这样做?

[TestMethod()]
public void docalcTest(int actual)
{
     ...
    actual = ...

测试方法将在没有参数的情况下被调用,所以它在这里有点没用。您可以将其更改为:

[TestMethod()]
public void docalcTest()
{
     ...
    int actual = ...