2015-10-08 39 views
0
using System; 

namespace ConsoleApplication 
{ 
    class Program 
    { 
     public delegate void mydel(int z); 

     static void Main(string[] args) 
     { 
      Program p = new Program(); 

      Random r = new Random(); 
      int k = r.Next(99); 

      mydel f; 

      if (k > 50) 
      { 
       f = new mydel(p.high); 
      } 

      if (k < 50) 
      { 
       f = new mydel(p.low); 
      } 

      //f(k) is underlined and Use of unassigned local variable 'f'  
      f(k); 
     } 

     //methods 
     public void high(int m) 
     { 
      Console.WriteLine("{0}>50", m); 
     } 

     public void low(int n) 
     { 
      Console.WriteLine("{0}<50", n); 
     } 
    } 
} 

我期望f(k)工作,因为我给委托参数。为什么我得到这个错误? (对F(k)的部分使用未分配的局部变量 'F' 的)未分配的变量错误

+0

添加其他的。如果(k> 50){...} else if(k <50){...} else {...}''k == 50' –

+0

如果'k == 50'会怎么样?然后'f'不会被分配。 –

回答

2

只需添加null

mydel f = null 

或者把其他条件之间。因为,当未初始化k == 50 F:

mydel f; 

    if (k > 50) 
    { 
     f = new mydel(p.high); 
    } 
    else 
    { 
     f = new mydel(p.low); 
    } 
+0

编译器是否在编译时检查是否覆盖了其他块的所有可能性? – Lyrk

+1

@Lyrk是的,它的确如此。 – pwas

+1

@Lyrk它检查变量是否被初始化。它等于'mydel f = k> 50?新的mydel(p.high):new mydel(p.low);'这样变量被赋值 – Backs

2

如果k > 50则f是一些代表,如果k < 50 - 太多。如果k == 50?在这种情况下,没有指定f(即使它不为空) - 所以你不能使用它。

快速修复:

mydel f = null; 

但你会得到NullReferenceExceptionk == 50; 您还可以在k == 50的情况下添加其他if;