Я работаю над боттовым чатом и в классе Command.cs, я наткнулся на странную проблему. У меня есть один конструктор, который принимает Action<string, User, Channel>
и тот, который принимает Func<string, User, Channel, bool>
. Первый конструктор должен назвать второй с Func
, который вызывает Action
и возвращает true. Это работало нормально, когда я использовал 7 параметров в обоих конструкторах, но как только я добавил 8-й, он прекратил компиляцию.Несоответствие между Func и Action с различным количеством параметров конструктора?
Ошибка, которую я получаю, это CS8030 «Анонимная функция, преобразованная в возвращаемый делегат void, не может вернуть значение». но до того, как я добавил 8-й параметр, код компилировался просто отлично
Единственное различие между двумя фрагментами заключается в том, что я добавил дополнительный параметр description
.
перед:
public class Command
{
public Command(string name, Action<string, User, Channel> action, bool adminOnly = false, bool modOnly = false, bool ownerOnly = false, bool hasUserCooldown = true, TimeSpan? cooldown = null, bool allowOtherCommands = false)
: this(name, (m, u, c) => { action(m, u, c); return true; }, adminOnly, modOnly, ownerOnly, hasUserCooldown, cooldown)
{
}
public Command(string name, Func<string, User, Channel, bool> action, bool adminOnly = false, bool modOnly = false, bool ownerOnly = false, bool hasUserCooldown = true, TimeSpan? cooldown = null, bool allowOtherCommands = false)
{
}
}
public class User { }
public class Channel { }
после:
public class Command
{
public Command(string name, Action<string, User, Channel> action, bool adminOnly = false, bool modOnly = false, bool ownerOnly = false, bool hasUserCooldown = true, TimeSpan? cooldown = null, bool allowOtherCommands = false, string description = null)
: this(name, (m, u, c) => { action(m, u, c); return true; }, adminOnly, modOnly, ownerOnly, hasUserCooldown, cooldown, description)
{
}
public Command(string name, Func<string, User, Channel, bool> action, bool adminOnly = false, bool modOnly = false, bool ownerOnly = false, bool hasUserCooldown = true, TimeSpan? cooldown = null, bool allowOtherCommands = false, string description = null)
{
}
}
public class User { }
public class Channel { }
Большое спасибо.
Не вижу никакой разницы между вашим до и после кода, хотя. – Rahul
@Rahul Я добавил параметр в самом конце конструктора «string description = null» после allowOtherCommands – four