使用未分配的局部变量'totalroadtax'

时间:2014-01-22 01:17:05

标签: c# methods asmx

我正在尝试为我的网络服务创建一种方法,但我收到标题

中列出的错误
  

使用未分配的局部变量'totalroadtax'

这是用户必须输入2个不同的变量来触发webmethod

中的方法
[WebMethod]
public double RoadTax(int engineCapacity, int vehicleAge)
{
    double totalroadtax;

    if (engineCapacity.Equals("600") && vehicleAge.Equals("12"))
    {
        totalroadtax = ((200.00 * 0.782) * (1.10));
    }

    return totalroadtax;
    //return (engineCapacity - vehicleAge);
}

我在我的方法中声明了我的totalroadtax,输入一些caluclation方法并返回值。我检查了有关此方法的必要信息,但我仍然收到错误。我在这里留下了什么吗?

4 个答案:

答案 0 :(得分:5)

可以跳过if(如果条件为false)并且您正在返回totalroadtax。该变量未在该点初始化,因为您声明它没有初始值。

您应该使用一些初始值声明变量,如:

double totalroadtax = 0;

修改

您的代码不必要地将int值与string文字进行比较。以这种方式执行条件更清洁,更有效:

[WebMethod]
public double RoadTax(int engineCapacity, int vehicleAge)
{
    double totalroadtax = 0;

    if (engineCapacity == 600 && vehicleAge ==12)
    {
        totalroadtax = ((200.00 * 0.782) * (1.10));
    }

    return totalroadtax;
}

无需致电Equals() - ==运营商会更好地阅读并执行类型安全检查。

我还建议您不要对浮点值执行直接相等性检查。不应使用==,而应该检查以下内容:

if ( (engineCapacity >599.9999 && engineCapacity < 600.00001) && ...

这是因为浮点值不是分数的精确表示。

阅读此question了解详情。

答案 1 :(得分:3)

如果未满足totalroadtax条件,

if将被取消分配。将您的声明更改为:

double totalroadtax = 0d;

答案 2 :(得分:3)

始终初始化变量是个好习惯。

在这种特殊情况下,如果if评估为false,则变量totalroadtax将返回未初始化状态。要解决此问题,您需要初始化totalroadtax

double totalroadtax = 0d;

这是一个替代的更好的解决方案imo,一起避免变量:

[WebMethod]
public double RoadTax(int engineCapacity, int vehicleAge)
{
    if (engineCapacity.Equals("600") && vehicleAge.Equals("12"))
    {
        return ((200.00 * 0.782) * (1.10));
    }

    return 0d;
}

答案 3 :(得分:0)

没有太多要添加到以前的答案所以我将从显而易见的开始:你的方法不会初始化变量。

您还提到您的方法每次都返回0。考虑这一行:

engineCapacity.Equals("600") && vehicleAge.Equals("12")

原因如下:

在这种情况下,Equals会比较string"600")和intengineCapacityvehicleAge)。 if条件将失败并返回0。使用==等于运算符使用int来比较值。