为什么这个C#代码会出错?

时间:2010-12-15 23:28:20

标签: 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);

5 个答案:

答案 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)

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

正如杰西所说,如果是其他的话,请将其设为单个,否则编译器可以看到没有其他路径。无论如何,它的效率稍高一些,因为你的代码总是执行所有三个测试,而他最多只执行两次测试。