Есть чат в котором идет регистрация команд таким методом:
chat.regCmd("getWeapon", weapon.getWeapon);
//Chat.cs
public delegate void CmdCallback(IPlayer player, object[] args);;
private Dictionary<string, CmdCallback> cmdDic = new Dictionary<string, CmdCallback>();
public async Task regCmd(String nameCmd, CmdCallback callback)
{
cmdDic.Add(nameCmd, callback);
}
private void invokeCmd(IPlayer player, String cmd, object[] args)
{
if (cmdDic.ContainsKey(cmd))
{
cmdDic[cmd](player, args);
}
else
{
emitAddMessage(player, true, "Command not found");
}
}
//Weapon.cs
public void getWeapon(IPlayer player, object[] args)
{
try
{
string nameWeapon = (string)args[1];
int ammoCount = int.Parse((string)args[2]);
player.GiveWeaponAsync(nameWeapon, ammoCount, true);
}
catch (Exception e)
{
chat.emitAddMessage(player, true, "/getWeapon [NameWeapon] [Ammo]");
}
}
По итогу выходит что много команд ссылаются на методы с одинаковыми параметрами где в object[] args передаются их параметры и внутри метода идет их получение.
Как можно привести к такому типу как:
getWeapon(string nameWeapon, int ammoCount);
грубо говоря указывать в методе уже необходимые параметры и добавить прослойку которая будет перед вызовом метода команды проверять args на наличие необходимых параметров и в противном случае сразу возвращать ответ чтобы убрать в каждом методе try/catch.
object[] args, так и передавайтеnew object[]{true, "Commamd not found"}– Александр Sep 04 '19 at 01:28