2010-12-15 67 views
0

真正的新手问题,但为什么这不工作?我越来越为什么这个C#代码踢出一个错误?

使用未赋值的变量 “比较”

为错误

 string comparison; 
     Console.WriteLine("Enter the first number"); 
     int firstNum = Convert.ToInt32(Console.ReadLine()); 
     Console.WriteLine("Enter the second number"); 
     int secondNum = Convert.ToInt32(Console.ReadLine()); 
     if (firstNum == secondNum) 
      comparison = "equals to"; 
     if (firstNum < secondNum) 
      comparison = "less than"; 
     if (firstNum > secondNum) 
      comparison = "greater than"; 
     Console.WriteLine("{0}",comparison); 
+0

对于任何人谁通过Wrox的有2001起C#中,你可以看到因此,在某种程度上第66页 – super9 2010-12-15 23:34:08

回答

5

这几乎是自解释 - 比较不能保证被赋值(有一个值),并且编译器因此引发错误。

基本上你的if语句可能永远不会将值设置为'比较',这就是它失败的原因。

一个快速和肮脏的方式圆这将是声明的方式比较相似,这

string comparison = "unassigned";

string comparison = String.Empty;

+0

这个替代解决方案,编译器是先发制人的问题并提前踢了一个错误?因为数学逻辑保证比较始终会被赋值 – super9 2010-12-15 23:38:38

+0

从某种意义上说 - 是的。如果你真的有兴趣,丹尼尔已经提供的链接会更好,更深入地解释它比我能: - ] – Lee 2010-12-15 23:40:06

+0

为什么你的解决方案快速和肮脏的方法是什么?看起来像'正确'的方法不是? – super9 2010-12-15 23:45:05

12

因为编译器不知道comparison是一个可执行文件的路径。改变了三种ifs到IF-THEN-别人的:

if (firstNum == secondNum) 
     comparison = "equals to"; 
    else if (firstNum < secondNum) 
     comparison = "less than"; 
    else 
     comparison = "greater than"; 

,也将努力

0

您可以设置比较的String.Empty以及在声明它...

0

这里的基本问题是,编译器不会检查这样的一系列条件来查看它们的组合,它们涵盖所有可能的选项。条件中的任何东西都被认为是可以执行的,那就是,它从来不会看大局。

正如杰西所说,如果其他东西只有一个,那么编译器可以看到没有其他路径。无论如何,它的效率稍高一点,因为你的代码总是执行所有三个测试,而他的执行最多只有两个测试。

相关问题