C#局部变量

本文关键字:局部变量 | 更新日期: 2023-09-27 18:23:59

首先是代码:

if (A1.Text != "" || A1.Text != null)
{
    string D1 = "<"+A1.Text+">";
}
else
{
    string D1 = "null";
}

现在我尝试稍后引用D1。

Ex this.label1.Text = D1;

引用和定义字符串的if语句在同一个父块中,那么为什么我不能使用D1呢?

C#局部变量

您需要将声明移动到父块中,如下所示:

    string D1;
    if (A1.Text != "" || A1.Text != null)
    {
        D1 = "<"+A1.Text+">";
    }
    else
    {
        D1 = "null";
    }
    // Then you can reference `D1` later in the same method.
    this.label1.Text = D1;
变量只能在定义作用域或子作用域中访问。以这种方式重组您的代码-
string D1;
if (A1.Text != "" || A1.Text != null)
    {
        D1 = "<"+A1.Text+">";
    }
    else
    {
        D1 = "null";
    }

添加到上面的答案

请查看此链接以获取更多启发

编译器的业务是生成代码,管理该程序操作的数据的存储。有很多不同的方法可以生成代码来管理内存,但随着时间的推移,两种基本技术已经根深蒂固。

第一种是有某种"长寿命"存储区,在那里,存储中每个字节的"寿命"——也就是说,它与某个程序变量有效关联的时间段——无法轻易提前预测。编译器生成对"堆管理器"的调用,该管理器知道如何在需要时动态分配存储,并在不再需要时回收存储。

第二种是具有某种"短寿命"存储区域,其中存储中每个字节的寿命是众所周知的,特别是存储的寿命遵循"嵌套"模式。也就是说,短寿命变量中寿命最长的变量的分配与其后的短寿命变量的分配严格重叠

局部变量遵循后一种模式;当一个方法被输入时,它的局部变量变为活动的。当该方法调用另一个方法时,新方法的局部变量将变为活动的。在第一个方法的局部变量失效之前,它们就会失效。与局部变量相关的存储器的寿命开始和结束的相对顺序可以提前计算出来。

因此,局部变量通常被生成为"堆栈"数据结构上的存储,因为堆栈具有这样的特性,即第一个推到它上面的东西将是最后一个弹出的东西

所以整体局部变量是短期的,通常存储在堆栈中,为什么堆栈比其他堆栈更有效。链接了解为什么堆叠的更多信息。所以你应该按照之前的建议增加它的范围

    string D1;
    if (A1.Text != "" || A1.Text != null)
    {
        D1 = "<"+A1.Text+">";
    }

为了简化代码,您也可以这样写

if (!string.IsNullOrWhiteSpace(A1.Text))
{
    label1.Text = "<" + A1.Text + ">";
}
else
{
    label1.Text = "null";
}