C# 无法从其他方法访问局部变量

C# 无法从其他方法访问局部变量,c#,.net,C#,.net,在我的代码中,我有以下内容: public void PopulateForm(int i) { DAL.TicketsDataSetTableAdapters.TicketDetailsTableAdapter fobj = new DAL.TicketsDataSetTableAdapters.TicketDetailsTableAdapter(); DataTable dt = new DataTable(); dt = fobj.GetTicketUpdates(

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

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();
}
然后在后面代码的另一个方面,我有:

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);
}
但当我构建解决方案时,它会说:


当前上下文中不存在名称“dt”

问题与变量范围有关。当您在一个方法内声明一个变量时,它只能在该方法内访问,而不存在于该方法外

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

DataTable dt = new DataTable();

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

protected void btnNext_Click1(object sender, EventArgs e)
{
    // ... 
}

但是,在这种情况下,您应该知道,当您调用
btnNext\u Click1
时,
dt
变量将为空,因为它只会在
PopulateForm
调用中填充。

这是非常基本的。在PopulateForm方法中将dt声明为局部变量。在该方法之外,它不存在。它不是公共的还是私有的,dt是函数的本地。您可能(也许?)希望将其声明为类变量并在类构造函数中初始化。(学习面向对象编程的基础知识。)没有一本书清楚地解释了两者的区别。。。。我相信以身作则,反复尝试……我同意这是基本的,但我们都需要学习,OP似乎只需要学习。简而言之,你应该在每个方法中声明
dt
,除非
dt
的值需要在方法之间共享,然后应该在类级别声明一次。我非常熟悉一门亚洲语言。如果有人问我如何说一个我认为很基本的短语。我不会告诉他们“这是非常基本的”,因为这让人觉得这个人有一种优越的情结,而且非常傲慢。事实上,在这个场景中,我会很感激那个想要学习的人,我会帮助他们并解释说一个短语的不同方式。当然,在这个社区里,我们必须互相帮助,我们只是想学习!只有当状态需要共享时,它才应该在类级别。如果只是给出一个声明,那么可能会导致错误代码。@Enigmativity,你是对的:“如果你想重用变量内容,(…)”