0

早上好,简单的愚蠢问题。我发现有类似问题的帖子,但通读后并没有解决我的错误。

For 循环的返回值

无法从方法内的 foreach 循环中获取返回值

方法:meth1 meth2 ect....都返回一个值,但目前我收到错误

“错误 1 ​​'Proj5.Program.meth1(int)': 并非所有代码路径都返回一个值”对于每个 meth 方法。

我的逻辑猜测是它没有看到循环中的值??...

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Proj5
{
class Program
{
    static void Main()
    {
        for (int i = 1; i < 101; i++)
        {
            if (i == 3 || 0 == (i % 3) || 0 == (i % 5) || i == 5)
            {
                Console.Write(meth1(i));
                Console.Write(meth2(i));
                Console.Write(meth3(i));
                Console.Write(meth4(i));
            }
            else
            {
                Console.Write(TheInt(i));
            }
        }
        Console.ReadLine();
    }

    static string meth1(int i)
    {
        string f = "fuzz";

        if (i == 3)
        {
            return f;
        }
    }
    static string meth2(int i)
    {
        string f = "fuzz";

        if (0 == (i % 3))
        {
            return f;
        }
    }
    static string meth3(int i)
    {
        string b = "buzz";

        if (i == 5)
        {
            return b;
        }

    }
    static string meth4(int i)
    {
        string b = "buzz";

        if (0 == (i % 5))
        {
            return b;
        }
    }
    static int TheInt(int i)
    {
        return i;
    }

}
}
4

3 回答 3

3

你说你的方法应该返回一个字符串,但是如果 i<>3,你没有说应该返回什么。顺便说一下,方法 2 和 3 也有同样的问题(还有 4 )。我不会谈论 TheInt 方法,这很有趣;)

更正

static string meth1(int i)
    {
        string f = "fuzz";

        if (i == 3)
        {
            return f;
        }
        return null;//add a "default" return, null or string.Empty
    }

或更短

static string meth1(int i) {
    return (i == 3) ? "fuzz" : null/*or string.Empty*/;
}
于 2012-06-28T14:05:55.350 回答
0

只有当 if 被评估为 true 时,您的函数才会返回。在 if 之外添加 return 语句,或添加 else 语句,您的代码将编译并工作。

static string meth2(int i)
{
    string f = "fuzz";

    if (0 == (i % 3))
    {
        return f;
    }
    else
      return "";
}
于 2012-06-28T14:06:35.633 回答
0

当您将方法声明为返回值时(如 meth1 等),您应该遵守此声明。

如果不满足内部条件,您的方法不会返回任何内容。编译器注意到这一点并向您抱怨

您应该确保每个可能的执行路径都会从被调用的方法中返回一些内容给调用者。

例如

static string meth3(int i)     
{         
    string b = "buzz";          
    if (i == 5)         
    {             
        return b;         
    }      
    // What if the code reaches this point?
    // What do you return to the caller?
    return string.Empty; // or whatever you decide as correct default for this method
} 
于 2012-06-28T14:07:41.213 回答