2014-01-22 30 views
0

我想创建我的web服务的方法,但是我收到的称号使用未分配的局部变量“totalroadtax”

未分配的局部变量“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在我的方法,inpu t一些计算方法并返回值。我检查了这种方法的必要信息,但仍然收到错误消息。我在这里留下什么了吗?

回答

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了解更多详情。

3

totalroadtax在未满足if条件时未分配。将您的声明更改为:

double totalroadtax = 0d; 
+0

在这里使用'd'文字有什么好处吗? –

+0

@ Selman22不,它只是表明文字0是'double'类型的。 – xxbbcc

+0

但我不太确定为什么.asmx返回的值为0。 –

3

总是初始化变量是一种很好的做法。

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

double totalroadtax = 0d; 

这里是另一种更好的解决方案海事组织,避免了变量一起:

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

    return 0d; 
} 
+0

我试着运行.asmx中的webmethod,但它返回给我一个0.可能是由于'return 0d;'? –

+1

@TeoChuenWeiBryan'if'条件没有改变,所以它必定是你的病情的问题。 –

+0

另外,'0d'是可选的,它只是表示它是'double',而不是'int'。这是很好的做法,因为它可以防止可能的转换(在其他情况下)并传达开发人员的意图。 –

0

没有太多添加到以前的答案如此我将从明显的开始:你的方法不会初始化变量。

你也提到你的方法每次也返回0。考虑这条线:

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

这里的原因:

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