2

有点编码新手在这里寻找一些建议!

我有以下方法 - 一个简单的公斤到磅的重量转换器,这是一个更大的控制台应用程序的一部分。用户选择他们想要的转换方案,然后输入他们的重量,它就会转换它。我正在对其进行一些单元测试以更好地理解它们,并决定添加一些代码,如果用户输入负数,将返回异常,只是为了使其更健壮。代码如下:

    public static double KilogramsToPounds(string weightInKilos)
    {
        //Convert parameter to a double for calculation
        double kiloWeight = Double.Parse(weightInKilos);

        //Convert Kilograms to Pounds
        double poundWeight = kiloWeight * 2.20462;
        try
        {
            if (kiloWeight < 0)
            {
                throw new ArgumentOutOfRangeException();
            }
            else
            {
                return poundWeight;
            }
        }
        catch (ArgumentOutOfRangeException argEx)
        {
            Console.WriteLine(argEx);
        }

        return 0;

    }

但是,当它运行时,它将始终返回 0,因为它需要一个 double 作为其返回类型。因此,您得到 ArgumentOutOfRange 异常和 0,因为它需要双精度。

我只是想知道是否有任何方法可以基本上说“如果您输入低于 0 的数字,则会收到此错误消息,但如果您输入有效的正数,您将获得正确的数字结果”?因为无论您是否需要提供一个数值来让它快乐以及错误消息,否则您将收到“并非所有代码路径都返回值”错误。

任何帮助是极大的赞赏。

注意 - 我应该添加来自用户控制台输入的字符串参数“weightInKilos”。显示选项的代码位于不同的文件中,转换率位于单独的文件中。

4

2 回答 2

2

try-catch从您的方法中删除。只要抛出你的异常。您的方法不应该捕获它自己抛出的异常。

try-catch周围的电话给KilogramsToPounds

于 2013-07-15T14:52:44.687 回答
1

关键是抛出异常将停止函数的执行,从而让您绕过整个“并非所有代码路径都返回值”错误。例如,这是有效的:

public int ZeroOrError(bool error)
{
    if (error)
        throw new ArgumentOutOfRangeException();
    else
        return 0;
}

即使从技术上讲,您不会在if块的第一部分返回值。

所以你只需要不捕捉你的异常(你不应该这样做),你应该很高兴。

于 2013-07-15T14:55:22.093 回答