从函数返回值时出错

本文关键字:出错 返回值 函数 | 更新日期: 2023-09-27 18:34:22

我创建了一个函数来返回设备类型的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"

我该如何解决?

谢谢。

从函数返回值时出错

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

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

temp初始化为0因为如果它在任何情况下都没有出现,那么它将返回什么 temp 值。

我知道默认值int 0但在这种情况下,您仍然必须初始化它。在那之前,它不会运行。

整数

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

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

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

基本上,编译器希望确保初始化所有变量。本地和实例。因此,从理论上讲,您始终必须初始化所有变量。

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

因此,例外不是局部变量没有自动初始化,例外是实例变量确实会自动初始化。