2012-07-14 96 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... 
} 

看到這些教訓: