gpt4 book ai didi

c# - 为什么 string Method(Object object) 可能与 Func 委托(delegate)类型不匹配?

转载 作者:太空宇宙 更新时间:2023-11-03 22:29:56 25 4
gpt4 key购买 nike

我正在编写一个简单的基于控制台的菜单系统,作为 C# 类(class)项目的一部分,其中菜单的每个项目都包含一个匹配用户输入的字符串和一个要执行的命令。

public class MenuItem
{
private string _description;

public string Description
{
get => _description;
set => _description = Validate(value, 1, 100, false);
}

public Func<string> CommandToExecute { get; set; } // works

public Func<Game, string> SaveCommand { get; set; } // refuses to work

}

我试过使用 Func<string>模板静态字符串方法,它工作得很好。但是,现在我需要另一个 Func 来匹配将 Game 对象作为输入参数并返回字符串的方法。

不幸的是,当我尝试使用 Func<Game, string> SaveCommand 时匹配我的方法static string SaveGame(Game game) ,程序将其标记为错误。

static string SaveGame(Game game)
{
var gameName = Console.ReadLine();

...
return gameName;
}

我调用这个方法如下:

static string GameRun()
{
var game = new Game(_settings);

var gameInnerMenu = new Menu(0)
{
MenuTitle = "Choose one of the following actions:",
MenuItemsDictionary = new Dictionary<string, MenuItem>()
{
{
"S", new MenuItem()
{
Description = "Save the current game",
CommandToExecute = SaveGame(game)
}
}
}
};

这段代码给我一个错误 Cannot convert source type 'string' to target type 'System.Func<GameEngine.Game, string>' .

总的来说,我对 C# 和 OOP 还很陌生,所以如果有任何关于导致它的原因以及如何修复它的建议,我将不胜感激。

最佳答案

问题是您没有分配 SaveGame CommandToExecute 的方法属性(property)。通过使用 CommandToExecute = SaveGame(game)您正在执行 SaveGame方法并将返回值赋给CommandToExecute .

你应该做的是

{
...
CommandToExecute = SaveGame
}

如果要查的话,这种语法叫做方法组转换,是写CommandToExecute = new Func<Game, string>(SaveGame)的捷径。 .

关于c# - 为什么 string Method(Object object) 可能与 Func<Object, string> 委托(delegate)类型不匹配?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58432699/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com