函数范围问题,未定义局部变量

时间:2018-11-12 22:42:18

标签: c#

我在dateClose.closesing时遇到错误,“使用未分配的局部变量”。我在for循环外声明了dateClose,并在for循环内定义了值。如何在for循环外使用该值?

public class SMA
{
    public Models.DateClose SMAMethod (Queue<Models.DateClose> queue, int period)
    {
        decimal average, sum=0;
        Models.DateClose dateClose;
        for (int i = 0; i < period; i++)
        {
            dateClose = queue.Dequeue();
            sum += dateClose.Close;
        }
        average = sum/period;
        dateClose.Close = average;  <--- error

        return dateClose;

    }
}

2 个答案:

答案 0 :(得分:1)

您只需执行

即可纠正错误
Models.DateClose dateClose = null;

但是,您还想添加一个空检查,以确保如果队列中没有任何项目,则不会遇到空引用异常。

答案 1 :(得分:1)

您可以执行此操作。如果您的period变量大于队列计数,则大于dateClose.Close将引发异常。

public Models.DateClose SMAMethod (Queue<Models.DateClose> queue, int period)
{
    decimal average, sum=0;
    Models.DateClose dateClose = null;
    for (int i = 0; i < period; i++)
    {
        dateClose = queue.Dequeue();

        if(dateClose != null)
            sum += dateClose.Close;
    }

    average = sum/period;
    dateClose.Close = average;  

    return dateClose;

}

为什么会出现此错误:

如果有该类,则无需初始化成员变量:

public class Test
{
    private int temp; // this is okay.

..
}

但是,如果您有局部变量,则需要对其进行初始化:

public void Method()
{
int variabl; 

sum += variable; // error.
}

因此,局部变量需要初始化,而成员变量不需要初始化。