C#return不允许用户知道无效条目

时间:2018-03-27 00:32:20

标签: c# if-statement return

我有一个if / else语句的公共字符串方法。当我没有在else上放置一个return关键字时,我得到错误并非所有代码路径都返回值但是当我将返回值添加到else语句时,我得到一个使用未分配的本地变量'结果' 。当我返回"请输入有效的号码&#34 ;; 时,当我输入任何字母时,控制台上都不显示任何内容。我需要让用户知道他们输入的内容无法转换为整数。

public string AddNumbers(string userInputString)
    {
        int result;
        int num2 = RandomNumberInt();
        bool isTrue = int.TryParse(userInputString, out int num1);

        if (isTrue == true)
        {
            result = num1 + num2;
            Console.WriteLine("Adding your number and a random number, please wait...");
            Thread.Sleep(1000);
            Console.WriteLine("{0} + {1} = {2}", num1, num2, result);
            isTrue = true;
            return result.ToString();
        }
        else
        {
            return "Please enter a valid number";
        }
    }

2 个答案:

答案 0 :(得分:0)

这是因为你的方法要求返回。但既然你有一个if,那么就这样说吧

团队负责人:嘿bob我希望你能完成这份工作。

在这里,你期待鲍勃完成你的工作,但你提出了条件

你:如果我今天可以去办公室,先生。

因为你有If条件,如果你今天不能去怎么办?这是否意味着你明天和其他任何一天都无法完成这项工作?这就是为什么它说并非所有代码路径都返回一个值,因为你从未给出其他/默认值

回到你的代码中,你问

    if (isTrue == true)
    {
        result = num1 + num2;
        Console.WriteLine("Adding your number and a random number, please wait...");
        Thread.Sleep(1000);
        Console.WriteLine("{0} + {1} = {2}", num1, num2, result);
        isTrue = true;
        return result.ToString();
    }

但如果不是这样,那么它会转到其他地方。您可以设置int result = 0,因此它是从start运行时定义的,它不会返回未分配的局部变量的错误。

public string myMethod()
{
    int result = 0; //This must have a default value so in else part it is not unassigned when you return.
    int num2 = RandomNumberInt();
    bool isTrue = int.TryParse(userInputString, out int num1);

    if(isTrue)
    {
        //do something in result here
        return result.toString(); //This will return your in value as string
    }
    else
    {
        return "Your message as string" // This will return any string to provide for string return of the method
    }
}

关于不显示字符串“请输入有效数字”的问题是另一个问题。您还必须发布什么方法调用将使用返回的字符串的AddNumbers方法。使用问题在于该方法,因为你的if和else格式正确;

答案 1 :(得分:0)

每当您对应用程序逻辑感到困惑时,将逻辑分解为多个部分通常会很有帮助。这使您有机会思考问题并决定任务如何累加以获得最终结果。

从高层开始,勾勒出整体流程:

for(i in 1:(length(s)-1)) print(s[c(i:(i+1))])

然后实施各个部分:

static public void MethodNameThatDescribesThisActivity()
{
    var userResponse = ReadIntegerFromConsole("Please enter an integer.");
    var randomNumber = RandomNumberInt();
    DisplaySum(userResponse, randomNumber, 1000);
}

如果你这样做,它通常会为你解决逻辑问题。它还使您的代码更易于阅读。