C# 使用未分配的局部变量';道路税总额';
我正在尝试为我的web服务创建一个方法,但是我收到标题中列出的此错误 使用未分配的局部变量“totalroadtax” 这就是用户必须输入2个不同变量以触发webmethod中的方法的方式C# 使用未分配的局部变量';道路税总额';,c#,methods,asmx,C#,Methods,Asmx,我正在尝试为我的web服务创建一个方法,但是我收到标题中列出的此错误 使用未分配的局部变量“totalroadtax” 这就是用户必须输入2个不同变量以触发webmethod中的方法的方式 [WebMethod] public double RoadTax(int engineCapacity, int vehicleAge) { double totalroadtax; if (engineCapacity.Equals("600") && vehicleAg
[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,输入一些计算方法并返回值。我检查了该方法是否具有此方法工作所需的信息,但仍然收到错误。我在这里遗漏了什么吗?可能会跳过
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) && ...
if((engineCapacity>599.9999和&engineCapacity<600.00001)和&。。。
这是因为浮点值不是小数的精确表示
有关详细信息,请阅读此部分。
如果不满足条件,则在时取消分配totalroadtax
。将您的声明更改为:
double totalroadtax = 0d;
最好总是初始化变量
在这种特殊情况下,如果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。考虑这一行:
engineCapacity.Equals("600") && vehicleAge.Equals("12")
原因如下:
在这种情况下,Equals
将比较字符串(“600”
)和int
(发动机容量
和车辆容量
).if
条件将失败并返回0
。使用=
相等运算符比较值,而使用int
s。在这里使用d
文本有什么好处吗?@Selman22不,它只是表明文本0的类型为double
。但我不太确定为什么在这里使用d
文本虽然.asmx返回的值是0。我尝试在.asmx中运行webmethod,但它返回了一个0。这可能是由于返回0d;
造成的吗?@teochuneweibrian如果条件没有改变,那么一定是你的条件有问题。另外,仅供参考,0d
是可选的,它只是表明它是ode>double
,而不是int
。这是一种很好的做法,因为它可以防止可能的强制转换(在其他情况下)并传达开发人员的意图。但是,在.asmx文件中,我在if-else语句中插入了输入的确切值,但仍然会收到返回值0。