c# - 并非所有代码路径都返回值 ' '

标签 c#

我正在尝试制作一个简单的霰弹枪游戏,其中用户与 CPU 和两者都选择射击、屏蔽或重新加载,但在我的 GetOptionFromUser 中我不断收到错误“ShotgunGame.Program.GetOptionFromUser()”:并非所有代码路径返回一个值

任何指导将不胜感激 这是我的方法

enum ShotgunOption
{
    Shoot = 1,
    Reload = 2,
    Shield = 3,
}

static void DisplayMenu()
{
    Console.WriteLine("Please pick an item:");
    Console.WriteLine("S - Shoot");
    Console.WriteLine("P - Shield");
    Console.WriteLine("R - Reload");         
    //Console.WriteLine("X - Exit");
}


static ShotgunOption GetOptionFromUser()
{
    char menuItem;
    DisplayMenu();
    menuItem = char.ToUpper(char.Parse(Console.ReadLine()));

    if (menuItem == 'S')
    {
        return ShotgunOption.Shoot;
    }
    else if (menuItem == 'P')
    {
        return ShotgunOption.Shield;
    }
    else if (menuItem == 'R')
    {
        return ShotgunOption.Reload;
    }

    while (menuItem != 'S' && menuItem != 'P' && menuItem != 'R')
    {
        Console.WriteLine("Error - Invalid menu item");
        DisplayMenu();
        menuItem = char.ToUpper(char.Parse(Console.ReadLine()));
    }
}

static void DisplayResults(ShotgunOption UserOption,ShotgunOption CPUOption, int UserScore, int UserBullets, int CPUBullets)
{
    Console.Clear();
    Console.WriteLine("Giving up?");
    Console.WriteLine("You Chose {0}, The Computer Chose{1} Your Score is {3} . You had {4} Bullet(s). The CPU had {5} bullets(s).", UserOption, CPUOption, UserScore, UserBullets, CPUBullets);
    Console.WriteLine("Thanks for playing!");
    Console.ReadKey();
}

最佳答案

您有一系列 if else if 返回值。但是你有

while (menuItem != 'S' && menuItem != 'P' &&
        menuItem != 'R')
...

没有返回语句。您需要在方法的末尾以及您的 if 中返回。

您尝试执行的操作与您的代码执行的操作有些不同。这样的事情会更好地为您服务:

static ShotgunOption GetOptionFromUser()
{
    char menuItem = null;
    DisplayMenu();
    var menuItem = char.ToUpper(char.Parse(Console.ReadLine()));

    while (menuItem != 'S' && menuItem != 'P' && menuItem != 'R')
    {
        Console.WriteLine("Error - Invalid menu item");
        DisplayMenu();
        menuItem = char.ToUpper(char.Parse(Console.ReadLine()));
    }

    if (menuItem == 'S')
    {
        return ShotgunOption.Shoot;
    }
    else if (menuItem == 'P')
    {
        return ShotgunOption.Shield;
    }
    return ShotgunOption.Reload;
}

这样,代码会循环直到它有一个有效值,然后在它离开循环后处理要返回的项目,确保通过代码的每条路径都返回一些东西。

关于c# - 并非所有代码路径都返回值 ' ',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31031872/

相关文章:

c# - Wpf 按钮条件绑定(bind)到一个变量

c# - 进程因 StackOverflowException 而终止

c# - 为什么我的 RichTextBox 没有更改前景色数据绑定(bind)

c# - WPF MVVM-在 View 模型中访问 View 控件的属性

c# - 如何获取泛型表达式中使用的属性类型?

c# - 使用在 C# 中声明的虚拟异步任务并在 F# 中覆盖它

c# - 选择 2 表的 2 列

c# - 用于创建新调制解调器的 API

c# - 在Win7/XP上未初始化IoC

java - C# 序列化器/反序列化器与 java 中的 XStream 具有相同的功能