【问题标题】:Main: not all code paths return a valueMain:并非所有代码路径都返回值
【发布时间】:2016-02-14 20:37:05
【问题描述】:

我正在制作列表并想在控制台中查看它。我有一个错误,它说:

Main():并非所有代码路径都返回值。

也许你能帮帮我?这是我的代码:

namespace ConsoleApplication5
{
    public class DocConfig
    {
        public string Description { get; set; }
        public List<DocPart> Parts { get; set; }
​
        public class DocPart
        {
            public string Title { get; set; }
            public string TexLine { get; set; }

            public class Program
            {
                public static int Main()
                {
                    List<DocPart> Parts = new List<DocPart>();
                    var doc = new DocConfig();
                    doc.Description = "bla bla";
                    doc.Parts = new List<DocPart>();
                    doc.Parts.Add(new DocPart { Title = "aaa", TexLine = @"\include{aaa.tex}" });
                    doc.Parts.Add(new DocPart { Title = "bbb", TexLine = @"\include{bbb.tex}" });
                    foreach (DocPart part in doc.Parts)
                    {
                        Console.WriteLine(part.Title);
                        {
                            Console.ReadLine();
                            return 0;
                        }
                    }
                }
            }
        }
    }
}

【问题讨论】:

  • 如果你的doc.Parts是空的,你会错过你的回报0。在方法代码的最后一行添加任何东西
  • 离题但是你需要嵌套类有什么原因吗? ...看起来它已经变得凌乱了
  • 是的,我以后会用到它们
  • @Mantas:您需要它们是嵌套类吗?这听起来不太可能......
  • 如果方法签名说它会返回一些东西,它必须在所有条件下都这样做。如果您的列表为空,则方法将不会返回任何内容。因此,您可能会在方法结束时返回一个默认值,这将修复编译错误。另外,请注意,您正在循环返回。因此,在第一次迭代本身中,该方法将返回,而循环的其余部分将不会执行。

标签: c# list main


【解决方案1】:

Main 的末尾返回一些东西。像这样:

public static int Main()
{
     List<DocPart> Parts = new List<DocPart>();
     var doc = new DocConfig();
     doc.Description = "bla bla";
     doc.Parts = new List<DocPart>();
     doc.Parts.Add(new DocPart { Title = "aaa", TexLine = @"\include{aaa.tex}" });
     doc.Parts.Add(new DocPart { Title = "bbb", TexLine = @"\include{bbb.tex}" });
     foreach (DocPart part in doc.Parts)
     {
           Console.WriteLine(part.Title);
           {
                 Console.ReadLine();
                 return 0;
           }
     }

     return -1;
}

【讨论】:

  • 它现在说,返回是类、结构或接口成员声明。无效的令牌
  • @Mantas ...这是因为闭合花括号。检查你放在哪里`return -1;`
  • @Mantas...确保在Main 方法结束之前放置了`return -1;`。还要检查你没有多余的右花括号。
  • 谢谢!!!但它仍然在第 12 行无效令牌中显示 1more 错误“但有空行。这是什么?
  • @Mantas...重新构建您的解决方案,并再次验证额外的闭合花括号。
【解决方案2】:

您收到此错误的原因是因为您在声明方法时

public static int Main()

您声明它将返回一个int 值。但是,您只能在可能永远不会运行的地方返回该值。例如,如果doc.Parts 列表为空,它将永远不会运行。因此,您需要添加代码以确保该方法始终返回某些内容。

例如,在方法末尾添加return -1; 会使这种情况下的错误消失。

【讨论】:

    【解决方案3】:
     public static int Main()
                {
                    List<DocPart> Parts = new List<DocPart>();
                    var doc = new DocConfig();
                    doc.Description = "bla bla";
                    doc.Parts = new List<DocPart>();
                    doc.Parts.Add(new DocPart { Title = "aaa", TexLine = @"\include{aaa.tex}" });
                    doc.Parts.Add(new DocPart { Title = "bbb", TexLine = @"\include{bbb.tex}" });
                    foreach (DocPart part in doc.Parts)
                    {
                        Console.WriteLine(part.Title);
                        {
                            Console.ReadLine();
                            return 0;
                        }
                    }
                    return 0;
                }
    

    【讨论】:

    • 请添加一些解释。
    猜你喜欢
    • 2011-12-17
    • 1970-01-01
    • 1970-01-01
    • 2021-11-08
    • 2013-10-06
    • 2014-04-02
    • 2019-05-26
    相关资源
    最近更新 更多