簡體   English   中英

C#-在“封閉”局部范圍內使用變量?

[英]C#- using a variable in an 'enclosing' local scope?

我正在嘗試向C#應用程序中添加一些新功能,特別是嘗試復制其某些行為,但是要在Web瀏覽器中而不是在當前的應用程序中進行復制。

我正在嘗試從MainWindow.cs類的方法內部調用在Browser.cs類中定義的方法。

該方法在Browser.cs定義為:

public partial class Browser : Form{
    public Browser(){
        ...
    }
    public void Browser_Load(object sender, EventArgs e){
        webKitBrowser1.Navigate("https://google.com");
    }
    ...
}

然后,我嘗試從MainWindow.cs調用它,如下所示:

public partial class MainWindow : Window{
    ...
    public MainWindow(){
        ...
        Browser mBrowser = new Browser();
        Object sender = new Object();
        EventArgs e = new EventArgs();
        mBrowser.Browser_Load(sender, e);
        ...
    }
    ...
}

但是,我收到一個編譯錯誤,指出:

不能在此范圍內聲明名為“ e”的本地或參數,因為該名稱在封閉的本地范圍內用於定義本地或參數

這是什么意思? 我以前從未遇到過此錯誤-我在與聲明位置相同的作用域內使用變量-“封閉局部作用域”是什么意思? 那是因為我使用e括號內的方法調用mBrowser.Browser_Load(sender, e)

當然,由於對該方法的調用與我定義e作用域相同,因此它不應該成為作用域的問題嗎?

我確實嘗試通過以下方式執行呼叫:

mBrowser.Browser_Load(sender, EventArgs e);

但這給了我一個編譯錯誤:

'EventArgs'是一種類型,在給定的上下文中無效。

誰能指出我在這里做錯了什么,以及應該如何才能正確調用此方法?

錯誤很明顯,您已經在范圍內定義了e命名變量(可能在未顯示的代碼部分)

但更重要的是,您不應該這樣調用Load事件,而應該在單獨的方法中提取功能,並Load事件和其他地方調用該方法

喜歡:

public void SomeMethodToBeCalledOnLoad()
{
    webKitBrowser1.Navigate("https://google.com");
}

public void Browser_Load(object sender, EventArgs e)
{
    SomeMethodToBeCalledOnLoad();
}

public MainWindow(){
    ...
    Browser mBrowser = new Browser();
    Object sender = new Object();
    EventArgs e = new EventArgs();
    SomeMethodToBeCalledOnLoad();//here
    ...
}

您已經在作用域中有一個名為e的變量。

嘗試像這樣調用您的方法

mBrowser.Browser_Load(this, EventArgs.Empty);

錯誤應該消失了。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM