Я пишу простую консольную систему меню как часть проекта курса на C #, где каждый пункт меню состоит из строки, соответствующей вводу пользователя, и команды для выполнения.
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 # и ООП в целом, поэтому я был бы признателен за любые предложения о том, что может быть причиной и как это можно исправить.