真正的新手问题,但为什么这不起作用?我正在
使用未分配的变量 '比较'
作为错误
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 :(得分:12)
因为编译器不知道comparison
是在可执行路径中。将三个ifs
更改为if-then-elses:
if (firstNum == secondNum)
comparison = "equals to";
else if (firstNum < secondNum)
comparison = "less than";
else
comparison = "greater than";
它会起作用
答案 1 :(得分:5)
这几乎是自我解释 - 无法保证比较(具有值),并且编译器因此而抛出错误。
基本上你的if语句可能永远不会将值设置为'比较',这就是它失败的原因。
快速而肮脏的方式是以类似于此
的方式声明比较 string comparison = "unassigned";
或
string comparison = String.Empty;
答案 2 :(得分:1)
这里的其他答案都是正确的。问题是C#requires所有变量在使用之前都是definitely assigned。
答案 3 :(得分:0)
您可以在声明它时将比较设置为string.Empty ...
答案 4 :(得分:0)
这里的基本问题是编译器不会检查这样的一系列条件,看它们组合起来涵盖了所有可能的选项。条件中的任何东西都被认为是可执行的,就是这样,它从不看大局。
正如杰西所说,如果是其他的话,请将其设为单个,否则编译器可以看到没有其他路径。无论如何,它的效率稍高一些,因为你的代码总是执行所有三个测试,而他最多只执行两次测试。