我创建了一个函数来返回设备类型的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"
我该如何解决?
感谢。
答案 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)
编译器基本上希望确保初始化所有变量。本地和实例。所以从理论上讲,你总是必须初始化所有的变量。
但是,由于编译器无法确定实例变量在首次读取之前是否已初始化,因此编译器会将所有实例变量隐式初始化为其默认值。
所以异常并不是局部变量没有自动初始化,例外情况是实例变量 会自动初始化。