从函数返回值时出错

时间:2012-05-17 09:14:22

标签: c# asp.net function

我创建了一个函数来返回设备类型的int值,如下所示;

public int getDeviceType(string device)
    {
        int temp;
        if (device.ToLower() == "android")
        {
            temp = 1;
        }
        else if (device.ToLower() == "ios")
        {
            temp = 2;
        }
        return temp;

    }

我想返回设备的类型。

但它给了我一个错误

 "Use of unassigned variable temp"

我该如何解决?

感谢。

4 个答案:

答案 0 :(得分:4)

只需使用默认值初始化temp,如下所示

public int getDeviceType(string device)
{
    int temp = 0;
    if (device.ToLower() == "android")
    {
        temp = 1;
    }
    else if (device.ToLower() == "ios")
    {
        temp = 2;
    }
    return temp;

}

答案 1 :(得分:1)

temp初始化为0,因为如果它没有进入任何一种情况,那么它将返回什么值的temp。

我知道int默认值为0但在这些情况下您仍需要初始化它。直到那时它才会运行。

答案 2 :(得分:0)

当整数变量具有默认值0以及为什么需要初始化它时,此行为的根本原因分析。

对于局部变量,编译器对流程有一个很好的了解 - 它可以看到变量的“读取”和变量的“写入”,并证明(在大多数情况下)第一次写入将在之前发生第一次阅读。

实例变量不是这种情况。考虑一个简单的属性 - 你怎么知道有人会在它得到它之前设置它?这使得强制执行合理规则基本上是不可行的 - 因此要么必须确保在构造函数中设置所有字段,要么允许它们具有默认值。 C#团队选择了后一种策略。

答案 3 :(得分:0)

编译器基本上希望确保初始化所有变量。本地和实例。所以从理论上讲,你总是必须初始化所有的变量。

但是,由于编译器无法确定实例变量在首次读取之前是否已初始化,因此编译器会将所有实例变量隐式初始化为其默认值。

所以异常并不是局部变量没有自动初始化,例外情况是实例变量 会自动初始化。