2012-07-14 86 views
-3

下面的代码是给我的这些错误,预期}出于某种原因

}预期

类型或命名空间定义或文件结束的预期

namespace WindowsFormsApplication1 
{ 
    public partial class Form1 : Form 
    { 
     public Form1() 
     { 
      InitializeComponent(); 
     } 

     private void button1_Click(object sender, EventArgs e) 
     { 
      Derpy merp = new Derpy(); 
      merp.OnDerp += new EventHandler(herp); 
      void herp(object sender, EventArgs e) 
      { 

      } 

     } 


    } 
} 

如何解决这个?

+0

也许'button1_Click'中间定义的'void herp'应该对你很有用。 – 2012-07-14 04:25:46

+0

void herp(object sender,EventArgs e) { } < - 删除那个,我猜你试图在void之前写私人空间,但VS不会让你来回一个理由 – 2012-07-14 04:25:47

回答

1

此:

private void button1_Click(object sender, EventArgs e) 
{ 
    ... 
    void herp(object sender, EventArgs e) 
    { 

    } 
} 

你不能嵌入命名函数像这样的另一个函数内。

+0

是的,你可以,你只是不能命名它,你必须将它存储在一个委托变量中,或者以其他方式使用它(如将它附加到事件处理程序中)。 – 2012-07-14 04:47:39

0

貌似代码

void herp(object sender, EventArgs e) 
{ 
} 

也许最好是一个方法本身。我不认为C#支持像JavaScript这样的方法内的方法

+1

您可以在另一个方法的主体中声明*匿名方法*。你不能说出他的名字。 – 2012-07-14 04:47:06

2

由于您试图在另一个函数内声明普通的命名函数,但C#仅支持匿名函数在其他函数内声明,

使用匿名函数:

private void button1_Click(object sender, EventArgs e) 
{ 
    Derpy merp = new Derpy(); 
    merp.OnDerp += (sender, e) =>  
    { 

    }; 
} 

或者把你方法click事件

private void button1_Click(object sender, EventArgs e) 
{ 
    Derpy merp = new Derpy(); 
    merp.OnDerp += new EventHandler(herp); 
} 
void herp(object sender, EventArgs e) 
{ 

} 
+0

你的第一句话说你不能在另一个里面声明一个函数,然后通过声明一个* anonymous *函数继续这样做(正确)。我会建议改写你的第一句话以避免这种含糊之处。 – 2012-07-14 04:48:51

+0

谢谢@AdamRobinson,请不要犹豫编辑我的答案,任何更正都将不胜感激。 – 2012-07-14 04:54:24

1

外右侧会

namespace WindowsFormsApplication1 
{ 
    public partial class Form1 : Form 
    { 
     public Form1() 
     { 
      InitializeComponent(); 
     } 

     private void button1_Click(object sender, EventArgs e) 
     { 
      Derpy merp = new Derpy(); 
      merp.OnDerp += new EventHandler(herp); 


     } 
     private void herp(object sender, EventArgs e) 
     { 

     } 


    } 
} 
0

在你的代码中发现嵌套的方法,和C#不支持它。

用途:

private void button1_Click(object sender, EventArgs e) 
{ 
    Derpy merp = new Derpy(); 
    merp.OnDerp += new EventHandler(herp); 

} 

void herp(object sender, EventArgs e) 
{ 

} 
4

解决方案1 ​​: 试试这个(匿名方法):

merp.OnDerp += (sender, e) => 
    { 
     // add your code here... 
     // may be 
     // derpy = ((Derpy) sender); 
     // be useful. 
    }; 

解决方案2: 简单的方法:

// add event handler 
merp.OnDerp += new EventHandler(herp); 

,并使用它:

// this must be in class body. not in another method 
void herp(object sender, EventArgs e) 
{ 
    // add your code here... 
} 

看到这些教训:

相关问题