Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#return不是';t让用户知道无效条目_C#_If Statement_Return - Fatal编程技术网

C#return不是';t让用户知道无效条目

C#return不是';t让用户知道无效条目,c#,if-statement,return,C#,If Statement,Return,我有一个带有if/else语句的公共字符串方法。当我没有在else上放置return关键字时,我会得到一个错误,不是所有代码路径都返回一个值,但是当我将return添加到else语句时,我会使用未分配的局部变量“result”。当我返回“请输入一个有效的数字”,当我键入任何字母时,控制台上不会显示任何内容。我需要让用户知道他们在中输入了无法转换为整数的内容 public string AddNumbers(string userInputString) { int res

我有一个带有if/else语句的公共字符串方法。当我没有在else上放置return关键字时,我会得到一个错误,不是所有代码路径都返回一个值,但是当我将return添加到else语句时,我会使用未分配的局部变量“result”。当我返回“请输入一个有效的数字”,当我键入任何字母时,控制台上不会显示任何内容。我需要让用户知道他们在中输入了无法转换为整数的内容

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";
        }
    }

这是因为你的方法要求回报。但是既然你有一个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,以便在else运行时从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的格式正确

每当您对应用程序逻辑感到困惑时,将逻辑分解为若干部分通常是有帮助的。这给了你一个思考问题的机会,并决定任务的总和如何给你最终的结果

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

static public void MethodNameThatDescribesThisActivity()
{
    var userResponse = ReadIntegerFromConsole("Please enter an integer.");
    var randomNumber = RandomNumberInt();
    DisplaySum(userResponse, randomNumber, 1000);
}
然后执行以下步骤:

static public int ReadIntegerFromConsole(string prompt)
{
    int result;
    while (true)
    {
        Console.WriteLine(prompt);
        var input = Console.ReadLine();
        var ok = int.TryParse(input, out result);
        if (ok) break;
        Console.WriteLine("That isn't a valid integer.");
    }
    return result;
}

static public void DisplaySum(int userNumber, int randomNumber, int delay)
{
    var sum = userNumber + randomNumber;
    Thread.Sleep(delay);
    Console.WriteLine("The total of {0} + {1} = {2}", userNumber, randomNumber, sum);
}

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

是否显示函数return?调用AddNumbers的代码是什么?else中没有调用console.WriteLine,这就是为什么您在屏幕上看不到任何输出。只需将定义
result
的位置移动到
if
中设置它的位置,就像在
int result=num1+num2
中一样,因为您不需要它在
if
之外。至于没有得到错误消息,你需要实际调用Console.WriteLine,我认为这个方法根本不需要返回类型,但这取决于你如何使用它。你能告诉我们电话号码吗?