我一直在使用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()句子在开关部分内工作正常!
答案 0 :(得分:3)
这里的问题不是变量超出范围,而是它不能保证分配给。
您可以通过将声明更改为:
轻松修复错误(尽管将自己暴露给运行时异常)ProcessDelegate process = null;
将交换机更改为default
分配委托的情况可以修复它,尽管编译器可能会遇到复杂的代码路径问题它就是这样的东西。
基本上,编译器提供了一个有用的错误,表示您有可能使用未分配的变量。如果后续代码没有运行,请将其分配给合理的值,您就可以了。