Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/297.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# 返回错误:并非所有代码路径都返回值_C# - Fatal编程技术网

C# 返回错误:并非所有代码路径都返回值

C# 返回错误:并非所有代码路径都返回值,c#,C#,我正在尝试开发一种方法,该方法将检查用户的输入,如果输入通过验证,仅返回输入 这就是我想做的: 用户输入 检查输入值 如果输入满足逻辑,则返回该值,否则再次调用该函数 这确实是我想要的,但编译器声明并非所有代码路径都返回值: public static int UserInput(){ int input = int.Parse(Console.ReadLine()); if (input < 1 || input > 4){ Console.Wri

我正在尝试开发一种方法,该方法将检查用户的输入,如果输入通过验证,仅返回输入

这就是我想做的:

  • 用户输入
  • 检查输入值
  • 如果输入满足逻辑,则返回该值,否则再次调用该函数 这确实是我想要的,但编译器声明并非所有代码路径都返回值:

       public static int UserInput(){
       int input =  int.Parse(Console.ReadLine());
       if (input < 1 || input > 4){
           Console.Write("Invalid Selection. Enter a valid Number (1,2,3 or 4): ");
           if (input < 1 || input > 4)  UserInput();
    
       } else{
           return input; 
       }
    }
    
    publicstaticintuserinput(){
    int input=int.Parse(Console.ReadLine());
    如果(输入<1 | |输入>4){
    Console.Write(“无效选择。输入有效数字(1、2、3或4):”;
    如果(输入<1 | |输入>4)用户输入();
    }否则{
    返回输入;
    }
    }
    
    但是,以下代码满足编译器的要求

        public static int UserInput()
        {
           int input =  int.Parse(Console.ReadLine());
           if (input < 1 || input > 4)
           {
               Console.Write("Invalid Selection. Enter a valid Number (1,2,3 or 4): ");
    
               if (input < 1 || input > 4)
               {
                   UserInput();
                   return -1; // Never reached, but must be put in to satisfy syntax of C#
               }
               return input; // Never reached, but must be put in to satisfy syntax of C#
           }
           else
           {
               return input;
    
           }
        }
    
    publicstaticintuserinput()
    {
    int input=int.Parse(Console.ReadLine());
    如果(输入<1 | |输入>4)
    {
    Console.Write(“无效选择。输入有效数字(1、2、3或4):”;
    如果(输入<1 | |输入>4)
    {
    用户输入();
    return-1;//从未到达,但必须输入以满足C的语法要求#
    }
    return input;//从未到达,但必须输入以满足C的语法#
    }
    其他的
    {
    返回输入;
    }
    }
    
    这种方法有效,但我得到了奇怪的结果。如果用户要输入一个
    输入
    ,该输入在第一次执行时为1、2、3或4(即
    如果
    语句的计算结果为
    false
    ),则返回的输入是用户输入的内容。但是,如果用户输入的值不是1、2、3或4,然后输入一个有效数字,则程序将执行以下操作:

    public static int UserInput()
    {
       int input =  int.Parse(Console.ReadLine());
       if (input < 1 || input > 4)
       {
           Console.Write("Invalid Selection. Enter a valid Number (1,2,3 or 4): ");
           return UserInput();
       }
       else
           return input;
    }
    
  • 返回输入
  • 跳入子if语句并运行UserInput()
  • 然后返回-1
    您需要
    返回UserInput()从外观上看。它只是看起来像一个将钻下去,并在底部返回不断调用自己,直到一个令人满意的Constant满足

    你要做的是向下钻取,让它返回一个值,然后在上面返回-1

    您还通过再次检查输入来复制自己。看起来这可以归结为以下几点:

    public static int UserInput()
    {
       int input =  int.Parse(Console.ReadLine());
       if (input < 1 || input > 4)
       {
           Console.Write("Invalid Selection. Enter a valid Number (1,2,3 or 4): ");
           return UserInput();
       }
       else
           return input;
    }
    

    您需要
    返回UserInput()从外观上看。它只是看起来像一个将钻下去,并在底部返回不断调用自己,直到一个令人满意的Constant满足

    你要做的是向下钻取,让它返回一个值,然后在上面返回-1

    您还通过再次检查输入来复制自己。看起来这可以归结为以下几点:

    public static int UserInput()
    {
       int input =  int.Parse(Console.ReadLine());
       if (input < 1 || input > 4)
       {
           Console.Write("Invalid Selection. Enter a valid Number (1,2,3 or 4): ");
           return UserInput();
       }
       else
           return input;
    }
    

    为什么不简化为以下内容(不需要else语句或第二个if)。还请注意,递归调用应该返回以使其正常工作:

    public static int UserInput()
    {
       int input =  int.Parse(Console.ReadLine());
       if (input < 1 || input > 4)
       {
           Console.Write("Invalid Selection. Enter a valid Number (1,2,3 or 4): ");
           return UserInput(); //<--- problem was here
       }
       return input; 
    }
    
    publicstaticintuserinput()
    {
    int input=int.Parse(Console.ReadLine());
    如果(输入<1 | |输入>4)
    {
    Console.Write(“无效选择。输入有效数字(1、2、3或4):”;
    
    return UserInput();//为什么不简化为以下内容(不需要else语句或第二个if)。还要注意,递归调用应该返回,以便其正常工作:

    public static int UserInput()
    {
       int input =  int.Parse(Console.ReadLine());
       if (input < 1 || input > 4)
       {
           Console.Write("Invalid Selection. Enter a valid Number (1,2,3 or 4): ");
           return UserInput(); //<--- problem was here
       }
       return input; 
    }
    
    publicstaticintuserinput()
    {
    int input=int.Parse(Console.ReadLine());
    如果(输入<1 | |输入>4)
    {
    Console.Write(“无效选择。输入有效数字(1、2、3或4):”;
    
    return UserInput();//不需要第二个
    if(input<1 | | input>4)
    不需要第二个
    if(input<1 | | input>4)
    非常感谢,我不知道你可以返回一个函数。@dgamma3是的,它是这样做的一种截断方式:int returnValue=UserInput();return returnValue;…..这就是它的基本功能。它返回的不是函数,而是函数返回的值。非常感谢,我不知道你可以返回函数。@dgamma3是的,这是一种截断的方法,可以执行以下操作:int returnValue=UserInput();return returnValue;…..这基本上就是它所做的。它返回的不是函数,而是函数返回的值