无法隐式转换类型' void'到'加倍

时间:2014-07-22 17:15:29

标签: c# void

写了一个方法,它返回相当于厘米参数的英寸,但它说不能隐式地将类型void转换为double。

我如何纠正这个?

下面是代码:

     private void button1_Click(object sender, EventArgs e)
    {
        Double inches = InchEquivalent(10.5);
    }

    public void InchEquivalent(double centimeters)
    {
        double answer;
        answer = centimeters * 0.394;
        MessageBox.Show(answer.ToString());

        return;
    }

2 个答案:

答案 0 :(得分:2)

正如评论中的人试图告诉你的那样,你必须给这个函数一个这样的返回类型:

public double InchEquivalent(double centimeters)
{
    var answer = centimeters * 0.394;
    MessageBox.Show(answer.ToString());

    return answer;
}

请注意double而不是void中的public double InchEquivalentreturn answer;,而不只是return;

但是我建议保持函数并且只负责一件事(那里不要做MessageBox.Show(我猜它只是用于调试),以及如果您愿意,可以将其设为静态:

private void button1_Click(object sender, EventArgs e)
{
    var inches = Centimeters2Inches(10.5);
    MessageBox.Show(inches.ToString());
}

public static double Centimeters2Inches(double centimeters)
{
    return centimeters * 0.394;
}

答案 1 :(得分:1)

好的,你有一个可以进行单位转换的功能。单位转换输入厘米和输出英寸。很好。

输入通过功能参数完成。很棒的选择。

使用MessageBox完成输出以向用户显示。这可能适用于快速测试和一次性代码,但从长远来看,这不是一个好方法。基本上有两个问题:

  1. 不可重复使用。现在你想以某种方式使用输出,但你不能,因为它没有返回。
  2. 违反了单一责任原则。显示给用户的字符串格式是转换的一部分。调用者无法在消息框中添加一些解释性文本。或者指定它应显示在文本框中而不是消息框中。
  3. 更好的设计是转换为输出以英寸为单位的值作为返回值,并让其他代码处理演示文稿。