在这个例子中,为什么我在变量范围内得到错误?

时间:2015-05-22 00:00:18

标签: c# scope

我一直在使用VS2008在C#中做一些例子。

示例是下一个:

    class Program{

        delegate double ProcessDelegate(double param1, double param2);

        static double Multiply(double param1, double param2){
            return param1 * param2;
        }

        static double Divide(double param1, double param2){
            return param1 / param2;
        }

        static void Main(string[] args){
            ProcessDelegate process;    
            char operacion;

            Console.WriteLine("introduzca 2 nros separados por coma: ");
            string input = Console.ReadLine();
            int commaPos = input.IndexOf(',');

            double param1 = Convert.ToDouble(input.Substring(0, commaPos));
            double param2 = Convert.ToDouble(input.Substring(commaPos+1, input.Length - commaPos - 1));

            Console.WriteLine("Introudzca M para Multiplicar o D para dividir: ");
            do{
                operacion = Console.ReadKey().KeyChar;
            }while (operacion != 'M' && operacion != 'D' && operacion != 'm' && operacion != 'd');

            switch (operacion){
                case 'D':
                    process = new ProcessDelegate(Divide);
                    //Console.WriteLine("Result: {0}", process(param1, param2));        
                    break;

                case 'M':
                    process = new ProcessDelegate(Multiply);
                    //Console.WriteLine("Result: {0}", process(param1, param2));
                   break;
            }//fin switch()

            Console.WriteLine("Result: {0}", process(param1, param2));
        }//fin Main()
    }//fin Class

我怀疑为什么如果在Main()部分内声明了进程变量,那么switch部分之外的WriteLine()语句不起作用?

注意:wirteLine()句子在开关部分内工作正常!

1 个答案:

答案 0 :(得分:3)

这里的问题不是变量超出范围,而是它不能保证分配给

您可以通过将声明更改为:

轻松修复错误(尽管将自己暴露给运行时异常)
ProcessDelegate process = null;

将交换机更改为default 分配委托的情况可以修复它,尽管编译器可能会遇到复杂的代码路径问题它就是这样的东西。

基本上,编译器提供了一个有用的错误,表示您有可能使用未分配的变量。如果后续代码没有运行,请将其分配给合理的值,您就可以了。