【发布时间】:2022-11-27 10:35:19
【问题描述】:
我在一个棋盘游戏解决方案中有两个项目(MenuSystem 和 GameBrain)。在项目中,我有枚举 EMenuNavigation,它位于 MenuSystem 中,链接添加到 GameBrain。
我有一个 MenuItem 类:
public class MenuItem
{
private string Title { get; set; }
public Func<EMenuNavigation>? MethodToRun { get; set; }
public override string ToString() => Title;
public MenuItem(string title, Func<EMenuNavigation>? methodToRun)
{
Title = title;
MethodToRun = methodToRun;
}
}
我的功能如下所示:
public static EMenuNavigation HvH()
{
var board = new Board(8);
var gameMenu = new Menu(EMenuLevel.Game, "> Game <");
gameMenu.MenuItems.Add(new MenuItem("Make A Move", board.MakeMove));
gameMenu.MenuItems.Add(new MenuItem("Cheat", null));
gameMenu.MenuItems.Add(new MenuItem("Save The Game", null));
board.ShowBoard();
return gameMenu.RunMenu();
}
我的问题在这里:
new MenuItem("Make A Move", board.MakeMove)
我收到“需要一个带有‘EMenuNavigation MakeMove()’签名的方法”
Board类中的方法:
public class Board
{
public EMenuNavigation MakeMove()
{
var userMove = GetUserCoords("What do checker you want to move?");
Console.WriteLine(userMove);
return EMenuNavigation.Stay;
}
}
问题:如果我已经在班级 Board 中拥有它,为什么“需要一个带有‘EMenuNavigation MakeMove()’签名的方法”,我该如何解决它?
如果我改变
Func<EMenuNavigation>?
至
Func<int>?
一切都可以工作,但它不会容易阅读,也很难理解数字的含义。 如果我尝试改变我的
gameMenu.MenuItems.Add(new MenuItem("Make A Move", board.MakeMove));
至
gameMenu.MenuItems.Add(new MenuItem("Make A Move", board.MakeMove()));
我收到另一个错误,也无法解决。
【问题讨论】:
-
请不要在图片中添加您的代码,使用编辑器将代码添加为文本。也只是在这里添加相关的代码,没有打开图片,但是好像很多。
-
是否有可能您的解决方案中有两种 EMenuNavigation 类型并且您引用了错误的类型?
-
当你在
MenuItem的 ctor 中使用Func<>时,试试这个:gameMenu.MenuItems.Add(new MenuItem("Make A Move", () => board.MakeMove() ));? -
@里沃。谢谢,这对我有帮助