问题 错误:使用未分配的局部变量'MyVariableName'

已加入
2011年10月15日
留言内容
21
编程经验
10+
(VS 2010)

我遇到错误"在以下代码行中使用未分配的局部变量'fJDCCorrection':

fJDMoonPhase = fJDMoonPhase + fJDorrection + E;

我不明白为什么错误,除了对该变量赋值之外,还需要通过Switch中的CASE语句之一来使其出错。
            switch (iPhase)
            {
                case 0:
                case 2:
                    fJDCorrection = pfunPTC_NewFull(T, fMoonsArgLat, fSunsMeaAno, fMoonsMeaAno);
                    break;

                case 1:
                    fJDCorrection = pfunPTC_1stQtr(T, fMoonsArgLat, fSunsMeaAno, fMoonsMeaAno);
                    break;

                case 3:
                    fJDCorrection = pfunPTC_LastQtr(T, fMoonsArgLat, fSunsMeaAno, fMoonsMeaAno);
                    break;

            }

fJDMoonPhase = fJDMoonPhase + fJDorrection + E;


在VS C#中,是否需要为此变量分配一些初始值?

这是VS C#的方法,可以防止没有任何CASE语句被证明是正确的吗?

我想可能是这种情况,但想问一下,因为我真的很新。

谢谢。
 
由主持人最后编辑:

金西尼

C#论坛主持人
工作人员
已加入
2011年4月23日
留言内容
3,563
地点
悉尼,澳大利亚
编程经验
10+
问题在于,从理论上讲,您的“ iPhase”变量可能具有不同于其中一种情况的值,例如4.编译器不能保证在所有情况下都将为'fJDCorrection'分配一个值。您必须在switch语句之前为变量分配默认值,例如0,否则在您的switch语句中添加“默认”大小写。我会选择后者,并实际上抛出一个带有文档注释的异常,该注释指示该情况在实践中永远不会发生。如果抛出该异常,那么您将知道存在问题,这绝对是一件好事。抛出异常后,编译器将知道,如果执行达到fJDCorrection的使用,则将设置一个值。

编辑:只是以为我会注意到这将是一个ArgumentOutOfRangeException。
 
最佳 底部