C# Book类编写报错:‘并非所有代码路径都返回值’问题求助
问题解决与代码修正
错误原因
你遇到的“并非所有代码路径都返回值”错误,是因为Display方法声明返回string类型,但方法体内仅执行了Console.WriteLine输出操作,没有任何return语句返回字符串值,违反了C#的方法返回规则。
代码修正要点
- 将
Display方法的返回类型从string改为void(该方法仅负责输出,无需返回值) - 移除
Display方法的static修饰符,改为实例方法,让每个Book对象直接调用自身的展示逻辑,无需手动传递参数 - 将类内的字段改为符合要求的属性(作业要求定义Title、Author、Year属性,原代码是字段,不符合规范)
修正后的完整代码
//filename: Book.cs using System; namespace MyApplication { class Book { // 定义属性(符合作业要求) public string Title { get; set; } public string Author { get; set; } public int Year { get; set; } // 实例方法:输出当前Book对象的标题和作者 public void Display() { Console.WriteLine($"{Title} by {Author}"); } static void Main(string[] args) { // 创建Book对象并赋值属性 Book lee = new Book(); lee.Title = "To Kill A Mockingbird"; lee.Author = "Harper Lee"; lee.Year = 1960; Book austen = new Book(); austen.Title = "Pride and Prejudice"; austen.Author = "Jane Austen"; austen.Year = 1813; Book orwell = new Book(); orwell.Title = "Nineteen Eighty-Four"; orwell.Author = "George Orwell"; orwell.Year = 1949; // 调用每个对象的Display方法 lee.Display(); austen.Display(); orwell.Display(); } } }
代码说明
- 属性定义:用
public string Title { get; set; }这种自动属性的方式,符合作业中“定义Title、Author、Year属性”的要求,比原字段更符合C#面向对象的封装规范。 - 实例方法Display:去掉
static后,每个Book对象都能调用自己的Display方法,直接使用自身的Title和Author属性,逻辑更清晰,也更符合面向对象的设计思想。 - 字符串插值:用
$"{Title} by {Author}"替代原有的字符串拼接,代码更简洁易读。
内容的提问来源于stack exchange,提问作者Emily Flood
相关产品推荐
相关产品推荐

