2012-05-17 90 views
0

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

就像一个注释,“temp”永远不会被设置为:2.你确定这是你应该这样做的方式吗? – ry8806

回答

4

只是初始化临时使用默认值象下面

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

} 
+0

只是做它,然后编译然后看。我知道int默认值为0默认值我的意思是你要返回,如果如果和如果其他评估为false那么应该返回什么值 – Waqar

+0

嗯..:)你是对的。有用。谢谢。 – Rohan

1

初始化temp0因为如果没有在任何情况下,去然后将它返回什么温度值。

我知道int默认值是0但仍然在这些情况下,你必须初始化它。直到那时它不会运行。

0

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

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

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

0

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

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

因此,例外情况并不是一个本地变量不会自动初始化,例外情况是一个实例变量确实会自动初始化