2013-02-16 141 views
1

我不断收到标题中指定的错误,但似乎无论如何都会返回l的值。这里有什么问题?我有一个else语句来处理了l如果与它没有任何变化:不是所有的代码路径都返回一个值吗?

public int validate(int zip, int i, out int l) 
{ 
    if ((zip < 10000) || (zip > 99999)) 
    { 

     Console.WriteLine("Input not accepted. Zips are 6-digits long."); 
     error = true; 

    } 
    else { 
     listzip[i] = zip; 
     error = false; } 

    for (int g = 1; (g <= (i - 1)); g++) 
    { 
     if (listzip[i] == listzip[g]) 
     { 
      Console.WriteLine("Repeated zip detected, please re-enter."); 
      if (!error) error = true; 
     } else error = false; 
    } 


    if (error) 
    { 
     l = i--; // forces a step back if an error was detected 
    }else l = i; 
} 
+3

你的方法的返回类型为int,但代码中没有'return'语句。 – dtb 2013-02-16 18:13:09

+0

dtb说什么。我认为这个混淆源于你使用out参数的事实,并且你认为设置和返回值是一样的。不是这样。 – 2013-02-16 18:31:39

回答

4

你的方法的返回类型为int,所以你需要从方法返回一个int值。您应该使用return声明返回值(see the link

如果方法的签名是public void validate(...)则不需要return声明。

1

您的方法返回类型是int,但在您的方法中没有返回值

如果您不想从您的方法中返回任何值,请将您的返回类型定义为void。喜欢;

public void validate(int zip, int i, out int l) 
{ 
    // No need return statement 
} 

退房声明从MSDN

return语句终止于它 出现并将控制返回给调用方法的方法的执行。它也可以返回 一个可选值。如果方法是void类型,则可以省略返回语句 。

1

您的方法被声明为C#编译器期望returnint值。但从代码的外观来看,您可能希望返回类型为void而不是int

public void validate(int zip, int i, out int l) 
{ 
    if ((zip < 10000) || (zip > 99999)) 
    { 
     Console.WriteLine("Input not accepted. Zips are 6-digits long."); 
     error = true; 
    } 
相关问题