C# 使用未分配的局部变量';道路税总额';

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

我正在尝试为我的web服务创建一个方法,但是我收到标题中列出的此错误

使用未分配的局部变量“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,输入一些计算方法并返回值。我检查了该方法是否具有此方法工作所需的信息,但仍然收到错误。我在这里遗漏了什么吗?

可能会跳过
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。