public TextCommand Get(string id)
        {
            TextCommand result = null;

            ReaderWriterLockHelper.Read(commands => {
                result = commands.Find(command => command.ID == id);
            });
            return(result);
        }
        public bool Add(string[] names, MethodInfo methodInfo, object instance = default, object tag = default, int permissionLevel = default)
        {
            string      id      = MethodInfoToID(methodInfo);
            TextCommand command = new TextCommand(id, names, tag, permissionLevel, methodInfo, instance);
            bool        cancel  = false;

            OnAdding?.Invoke(command, ref cancel);
            if (cancel)
            {
                return(false);
            }
            ReaderWriterLockHelper.Write(commands => {
                CheckMethodOverload(commands, id);
                commands.Add(command);
                OnAdded?.Invoke(command);
            });
            return(true);
        }