我正在尝试为我的网络服务创建一种方法,但我收到标题
中列出的错误使用未分配的局部变量'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方法并返回值。我检查了有关此方法的必要信息,但我仍然收到错误。我在这里留下了什么吗?
答案 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"
)和int
(engineCapacity
和vehicleAge
)。 if
条件将失败并返回0
。使用==
等于运算符使用int
来比较值。