无法从其他方法访问本地变量

Pri*_*ton -3 .net c#

在我的代码中,我有以下内容:

public void PopulateForm(int i)
{
    DAL.TicketsDataSetTableAdapters.TicketDetailsTableAdapter fobj = new DAL.TicketsDataSetTableAdapters.TicketDetailsTableAdapter();
    DataTable dt = new DataTable();
    dt = fobj.GetTicketUpdates(txtSupportRef.Text);
    txtShortDesc.Text = dt.Rows[0].Table.Rows[i]["ShortDesc"].ToString();
    txtNextStep.Text = dt.Rows[0].Table.Rows[i]["NextStep"].ToString();
    txtLastUpdated.Text = dt.Rows[0].Table.Rows[i]["LastUpdated"].ToString();
}
Run Code Online (Sandbox Code Playgroud)

然后在我背后的代码的另一个区域:

protected void btnNext_Click1(object sender, EventArgs e)
{
    int i = (int)ViewState["recordIndex"];
    i = i >= dt.Rows[0].Table.Rows.Count - 1 ? 0 : i + 1;
    PopulateForm(i);
}
Run Code Online (Sandbox Code Playgroud)

但是当我构建解决方案时,它说:

The name 'dt' does not exist in the current context

Rub*_*ias 5

问题与变量范围有关.在方法中声明变量时,它只能在该方法内部访问,并且不存在于该方法之外.

如果要重用该变量内容,则应将其移至更高级别,如类级别:

DataTable dt = new DataTable();

public void PopulateForm(int i)
{
    // ... 
}

protected void btnNext_Click1(object sender, EventArgs e)
{
    // ... 
}
Run Code Online (Sandbox Code Playgroud)

但是,在这种情况下,您应该知道在dt调用时变量将为空btnNext_Click1,因为它只会在PopulateForm调用时填充.