// 
// DeveloperConsole_GenericRegistration.cs
// Contains generic implementations of RegisterCommand for an arbitrary number of generic type parameters.
// 
// This code was autogenerated on 02/11/2021 at 09:26:41.
// Manual changes to this document will not be reflected if/when it is regenerated.
// 

using System;

namespace Cronyx.Console
{
	public partial class DeveloperConsole
	{
		/// <summary>
		/// Registers a console command that will parse zero arguments and invoke a delegate.
		/// </summary>
		/// <param name="name">A unique name for this command. Cannot be null or whitespace.</param>
		/// <param name="command">A delegate that is invoked when the command is called from the console.</param>
		/// <param name="description">A short, optional description of the command that appears in a list of all commands.</param>
		/// <exception cref="ArgumentException">Thrown if <paramref name="name"/> is null or empty, or if <paramref name="command"/> is null.</exception>
		/// <exception cref="InvalidOperationException">Thrown if <paramref name="name"/> is taken by another command.</exception>
		public static void RegisterCommand(string name, Action command, string description=null)
			=> RegisterCommand(name, (Delegate)command, description);

		/// <summary>
		/// Registers a console command that will parse one argument and invoke a delegate.
		/// </summary>
		/// <typeparam name="T0">The type of the first parameter passed to <paramref name="command"/></typeparam>
		/// <param name="name">A unique name for this command. Cannot be null or whitespace.</param>
		/// <param name="command">A delegate that is invoked when the command is called from the console.</param>
		/// <param name="description">A short, optional description of the command that appears in a list of all commands.</param>
		/// <exception cref="ArgumentException">Thrown if <paramref name="name"/> is null or empty, or if <paramref name="command"/> is null.</exception>
		/// <exception cref="InvalidOperationException">Thrown if <paramref name="name"/> is taken by another command.</exception>
		public static void RegisterCommand<T0>(string name, Action<T0> command, string description=null)
			=> RegisterCommand(name, (Delegate)command, description);

		/// <summary>
		/// Registers a console command that will parse two arguments and invoke a delegate.
		/// </summary>
		/// <typeparam name="T0">The type of the first parameter passed to <paramref name="command"/></typeparam>
		/// <typeparam name="T1">The type of the second parameter passed to <paramref name="command"/></typeparam>
		/// <param name="name">A unique name for this command. Cannot be null or whitespace.</param>
		/// <param name="command">A delegate that is invoked when the command is called from the console.</param>
		/// <param name="description">A short, optional description of the command that appears in a list of all commands.</param>
		/// <exception cref="ArgumentException">Thrown if <paramref name="name"/> is null or empty, or if <paramref name="command"/> is null.</exception>
		/// <exception cref="InvalidOperationException">Thrown if <paramref name="name"/> is taken by another command.</exception>
		public static void RegisterCommand<T0, T1>(string name, Action<T0, T1> command, string description=null)
			=> RegisterCommand(name, (Delegate)command, description);

		/// <summary>
		/// Registers a console command that will parse three arguments and invoke a delegate.
		/// </summary>
		/// <typeparam name="T0">The type of the first parameter passed to <paramref name="command"/></typeparam>
		/// <typeparam name="T1">The type of the second parameter passed to <paramref name="command"/></typeparam>
		/// <typeparam name="T2">The type of the third parameter passed to <paramref name="command"/></typeparam>
		/// <param name="name">A unique name for this command. Cannot be null or whitespace.</param>
		/// <param name="command">A delegate that is invoked when the command is called from the console.</param>
		/// <param name="description">A short, optional description of the command that appears in a list of all commands.</param>
		/// <exception cref="ArgumentException">Thrown if <paramref name="name"/> is null or empty, or if <paramref name="command"/> is null.</exception>
		/// <exception cref="InvalidOperationException">Thrown if <paramref name="name"/> is taken by another command.</exception>
		public static void RegisterCommand<T0, T1, T2>(string name, Action<T0, T1, T2> command, string description=null)
			=> RegisterCommand(name, (Delegate)command, description);

		/// <summary>
		/// Registers a console command that will parse four arguments and invoke a delegate.
		/// </summary>
		/// <typeparam name="T0">The type of the first parameter passed to <paramref name="command"/></typeparam>
		/// <typeparam name="T1">The type of the second parameter passed to <paramref name="command"/></typeparam>
		/// <typeparam name="T2">The type of the third parameter passed to <paramref name="command"/></typeparam>
		/// <typeparam name="T3">The type of the fourth parameter passed to <paramref name="command"/></typeparam>
		/// <param name="name">A unique name for this command. Cannot be null or whitespace.</param>
		/// <param name="command">A delegate that is invoked when the command is called from the console.</param>
		/// <param name="description">A short, optional description of the command that appears in a list of all commands.</param>
		/// <exception cref="ArgumentException">Thrown if <paramref name="name"/> is null or empty, or if <paramref name="command"/> is null.</exception>
		/// <exception cref="InvalidOperationException">Thrown if <paramref name="name"/> is taken by another command.</exception>
		public static void RegisterCommand<T0, T1, T2, T3>(string name, Action<T0, T1, T2, T3> command, string description=null)
			=> RegisterCommand(name, (Delegate)command, description);

		/// <summary>
		/// Registers a console command that will parse five arguments and invoke a delegate.
		/// </summary>
		/// <typeparam name="T0">The type of the first parameter passed to <paramref name="command"/></typeparam>
		/// <typeparam name="T1">The type of the second parameter passed to <paramref name="command"/></typeparam>
		/// <typeparam name="T2">The type of the third parameter passed to <paramref name="command"/></typeparam>
		/// <typeparam name="T3">The type of the fourth parameter passed to <paramref name="command"/></typeparam>
		/// <typeparam name="T4">The type of the fifth parameter passed to <paramref name="command"/></typeparam>
		/// <param name="name">A unique name for this command. Cannot be null or whitespace.</param>
		/// <param name="command">A delegate that is invoked when the command is called from the console.</param>
		/// <param name="description">A short, optional description of the command that appears in a list of all commands.</param>
		/// <exception cref="ArgumentException">Thrown if <paramref name="name"/> is null or empty, or if <paramref name="command"/> is null.</exception>
		/// <exception cref="InvalidOperationException">Thrown if <paramref name="name"/> is taken by another command.</exception>
		public static void RegisterCommand<T0, T1, T2, T3, T4>(string name, Action<T0, T1, T2, T3, T4> command, string description=null)
			=> RegisterCommand(name, (Delegate)command, description);

		/// <summary>
		/// Registers a console command that will parse six arguments and invoke a delegate.
		/// </summary>
		/// <typeparam name="T0">The type of the first parameter passed to <paramref name="command"/></typeparam>
		/// <typeparam name="T1">The type of the second parameter passed to <paramref name="command"/></typeparam>
		/// <typeparam name="T2">The type of the third parameter passed to <paramref name="command"/></typeparam>
		/// <typeparam name="T3">The type of the fourth parameter passed to <paramref name="command"/></typeparam>
		/// <typeparam name="T4">The type of the fifth parameter passed to <paramref name="command"/></typeparam>
		/// <typeparam name="T5">The type of the sixth parameter passed to <paramref name="command"/></typeparam>
		/// <param name="name">A unique name for this command. Cannot be null or whitespace.</param>
		/// <param name="command">A delegate that is invoked when the command is called from the console.</param>
		/// <param name="description">A short, optional description of the command that appears in a list of all commands.</param>
		/// <exception cref="ArgumentException">Thrown if <paramref name="name"/> is null or empty, or if <paramref name="command"/> is null.</exception>
		/// <exception cref="InvalidOperationException">Thrown if <paramref name="name"/> is taken by another command.</exception>
		public static void RegisterCommand<T0, T1, T2, T3, T4, T5>(string name, Action<T0, T1, T2, T3, T4, T5> command, string description=null)
			=> RegisterCommand(name, (Delegate)command, description);

		/// <summary>
		/// Registers a console command that will parse seven arguments and invoke a delegate.
		/// </summary>
		/// <typeparam name="T0">The type of the first parameter passed to <paramref name="command"/></typeparam>
		/// <typeparam name="T1">The type of the second parameter passed to <paramref name="command"/></typeparam>
		/// <typeparam name="T2">The type of the third parameter passed to <paramref name="command"/></typeparam>
		/// <typeparam name="T3">The type of the fourth parameter passed to <paramref name="command"/></typeparam>
		/// <typeparam name="T4">The type of the fifth parameter passed to <paramref name="command"/></typeparam>
		/// <typeparam name="T5">The type of the sixth parameter passed to <paramref name="command"/></typeparam>
		/// <typeparam name="T6">The type of the seventh parameter passed to <paramref name="command"/></typeparam>
		/// <param name="name">A unique name for this command. Cannot be null or whitespace.</param>
		/// <param name="command">A delegate that is invoked when the command is called from the console.</param>
		/// <param name="description">A short, optional description of the command that appears in a list of all commands.</param>
		/// <exception cref="ArgumentException">Thrown if <paramref name="name"/> is null or empty, or if <paramref name="command"/> is null.</exception>
		/// <exception cref="InvalidOperationException">Thrown if <paramref name="name"/> is taken by another command.</exception>
		public static void RegisterCommand<T0, T1, T2, T3, T4, T5, T6>(string name, Action<T0, T1, T2, T3, T4, T5, T6> command, string description=null)
			=> RegisterCommand(name, (Delegate)command, description);

		/// <summary>
		/// Registers a console command that will parse eight arguments and invoke a delegate.
		/// </summary>
		/// <typeparam name="T0">The type of the first parameter passed to <paramref name="command"/></typeparam>
		/// <typeparam name="T1">The type of the second parameter passed to <paramref name="command"/></typeparam>
		/// <typeparam name="T2">The type of the third parameter passed to <paramref name="command"/></typeparam>
		/// <typeparam name="T3">The type of the fourth parameter passed to <paramref name="command"/></typeparam>
		/// <typeparam name="T4">The type of the fifth parameter passed to <paramref name="command"/></typeparam>
		/// <typeparam name="T5">The type of the sixth parameter passed to <paramref name="command"/></typeparam>
		/// <typeparam name="T6">The type of the seventh parameter passed to <paramref name="command"/></typeparam>
		/// <typeparam name="T7">The type of the eighth parameter passed to <paramref name="command"/></typeparam>
		/// <param name="name">A unique name for this command. Cannot be null or whitespace.</param>
		/// <param name="command">A delegate that is invoked when the command is called from the console.</param>
		/// <param name="description">A short, optional description of the command that appears in a list of all commands.</param>
		/// <exception cref="ArgumentException">Thrown if <paramref name="name"/> is null or empty, or if <paramref name="command"/> is null.</exception>
		/// <exception cref="InvalidOperationException">Thrown if <paramref name="name"/> is taken by another command.</exception>
		public static void RegisterCommand<T0, T1, T2, T3, T4, T5, T6, T7>(string name, Action<T0, T1, T2, T3, T4, T5, T6, T7> command, string description=null)
			=> RegisterCommand(name, (Delegate)command, description);

		/// <summary>
		/// Registers a console command that will parse nine arguments and invoke a delegate.
		/// </summary>
		/// <typeparam name="T0">The type of the first parameter passed to <paramref name="command"/></typeparam>
		/// <typeparam name="T1">The type of the second parameter passed to <paramref name="command"/></typeparam>
		/// <typeparam name="T2">The type of the third parameter passed to <paramref name="command"/></typeparam>
		/// <typeparam name="T3">The type of the fourth parameter passed to <paramref name="command"/></typeparam>
		/// <typeparam name="T4">The type of the fifth parameter passed to <paramref name="command"/></typeparam>
		/// <typeparam name="T5">The type of the sixth parameter passed to <paramref name="command"/></typeparam>
		/// <typeparam name="T6">The type of the seventh parameter passed to <paramref name="command"/></typeparam>
		/// <typeparam name="T7">The type of the eighth parameter passed to <paramref name="command"/></typeparam>
		/// <typeparam name="T8">The type of the ninth parameter passed to <paramref name="command"/></typeparam>
		/// <param name="name">A unique name for this command. Cannot be null or whitespace.</param>
		/// <param name="command">A delegate that is invoked when the command is called from the console.</param>
		/// <param name="description">A short, optional description of the command that appears in a list of all commands.</param>
		/// <exception cref="ArgumentException">Thrown if <paramref name="name"/> is null or empty, or if <paramref name="command"/> is null.</exception>
		/// <exception cref="InvalidOperationException">Thrown if <paramref name="name"/> is taken by another command.</exception>
		public static void RegisterCommand<T0, T1, T2, T3, T4, T5, T6, T7, T8>(string name, Action<T0, T1, T2, T3, T4, T5, T6, T7, T8> command, string description=null)
			=> RegisterCommand(name, (Delegate)command, description);

		/// <summary>
		/// Registers a console command that will parse ten arguments and invoke a delegate.
		/// </summary>
		/// <typeparam name="T0">The type of the first parameter passed to <paramref name="command"/></typeparam>
		/// <typeparam name="T1">The type of the second parameter passed to <paramref name="command"/></typeparam>
		/// <typeparam name="T2">The type of the third parameter passed to <paramref name="command"/></typeparam>
		/// <typeparam name="T3">The type of the fourth parameter passed to <paramref name="command"/></typeparam>
		/// <typeparam name="T4">The type of the fifth parameter passed to <paramref name="command"/></typeparam>
		/// <typeparam name="T5">The type of the sixth parameter passed to <paramref name="command"/></typeparam>
		/// <typeparam name="T6">The type of the seventh parameter passed to <paramref name="command"/></typeparam>
		/// <typeparam name="T7">The type of the eighth parameter passed to <paramref name="command"/></typeparam>
		/// <typeparam name="T8">The type of the ninth parameter passed to <paramref name="command"/></typeparam>
		/// <typeparam name="T9">The type of the tenth parameter passed to <paramref name="command"/></typeparam>
		/// <param name="name">A unique name for this command. Cannot be null or whitespace.</param>
		/// <param name="command">A delegate that is invoked when the command is called from the console.</param>
		/// <param name="description">A short, optional description of the command that appears in a list of all commands.</param>
		/// <exception cref="ArgumentException">Thrown if <paramref name="name"/> is null or empty, or if <paramref name="command"/> is null.</exception>
		/// <exception cref="InvalidOperationException">Thrown if <paramref name="name"/> is taken by another command.</exception>
		public static void RegisterCommand<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9>(string name, Action<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9> command, string description=null)
			=> RegisterCommand(name, (Delegate)command, description);

		/// <summary>
		/// Registers a console command that will parse eleven arguments and invoke a delegate.
		/// </summary>
		/// <typeparam name="T0">The type of the first parameter passed to <paramref name="command"/></typeparam>
		/// <typeparam name="T1">The type of the second parameter passed to <paramref name="command"/></typeparam>
		/// <typeparam name="T2">The type of the third parameter passed to <paramref name="command"/></typeparam>
		/// <typeparam name="T3">The type of the fourth parameter passed to <paramref name="command"/></typeparam>
		/// <typeparam name="T4">The type of the fifth parameter passed to <paramref name="command"/></typeparam>
		/// <typeparam name="T5">The type of the sixth parameter passed to <paramref name="command"/></typeparam>
		/// <typeparam name="T6">The type of the seventh parameter passed to <paramref name="command"/></typeparam>
		/// <typeparam name="T7">The type of the eighth parameter passed to <paramref name="command"/></typeparam>
		/// <typeparam name="T8">The type of the ninth parameter passed to <paramref name="command"/></typeparam>
		/// <typeparam name="T9">The type of the tenth parameter passed to <paramref name="command"/></typeparam>
		/// <typeparam name="T10">The type of the eleventh parameter passed to <paramref name="command"/></typeparam>
		/// <param name="name">A unique name for this command. Cannot be null or whitespace.</param>
		/// <param name="command">A delegate that is invoked when the command is called from the console.</param>
		/// <param name="description">A short, optional description of the command that appears in a list of all commands.</param>
		/// <exception cref="ArgumentException">Thrown if <paramref name="name"/> is null or empty, or if <paramref name="command"/> is null.</exception>
		/// <exception cref="InvalidOperationException">Thrown if <paramref name="name"/> is taken by another command.</exception>
		public static void RegisterCommand<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10>(string name, Action<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10> command, string description=null)
			=> RegisterCommand(name, (Delegate)command, description);

		/// <summary>
		/// Registers a console command that will parse twelve arguments and invoke a delegate.
		/// </summary>
		/// <typeparam name="T0">The type of the first parameter passed to <paramref name="command"/></typeparam>
		/// <typeparam name="T1">The type of the second parameter passed to <paramref name="command"/></typeparam>
		/// <typeparam name="T2">The type of the third parameter passed to <paramref name="command"/></typeparam>
		/// <typeparam name="T3">The type of the fourth parameter passed to <paramref name="command"/></typeparam>
		/// <typeparam name="T4">The type of the fifth parameter passed to <paramref name="command"/></typeparam>
		/// <typeparam name="T5">The type of the sixth parameter passed to <paramref name="command"/></typeparam>
		/// <typeparam name="T6">The type of the seventh parameter passed to <paramref name="command"/></typeparam>
		/// <typeparam name="T7">The type of the eighth parameter passed to <paramref name="command"/></typeparam>
		/// <typeparam name="T8">The type of the ninth parameter passed to <paramref name="command"/></typeparam>
		/// <typeparam name="T9">The type of the tenth parameter passed to <paramref name="command"/></typeparam>
		/// <typeparam name="T10">The type of the eleventh parameter passed to <paramref name="command"/></typeparam>
		/// <typeparam name="T11">The type of the twelfth parameter passed to <paramref name="command"/></typeparam>
		/// <param name="name">A unique name for this command. Cannot be null or whitespace.</param>
		/// <param name="command">A delegate that is invoked when the command is called from the console.</param>
		/// <param name="description">A short, optional description of the command that appears in a list of all commands.</param>
		/// <exception cref="ArgumentException">Thrown if <paramref name="name"/> is null or empty, or if <paramref name="command"/> is null.</exception>
		/// <exception cref="InvalidOperationException">Thrown if <paramref name="name"/> is taken by another command.</exception>
		public static void RegisterCommand<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11>(string name, Action<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11> command, string description=null)
			=> RegisterCommand(name, (Delegate)command, description);

		/// <summary>
		/// Registers a console command that will parse thirteen arguments and invoke a delegate.
		/// </summary>
		/// <typeparam name="T0">The type of the first parameter passed to <paramref name="command"/></typeparam>
		/// <typeparam name="T1">The type of the second parameter passed to <paramref name="command"/></typeparam>
		/// <typeparam name="T2">The type of the third parameter passed to <paramref name="command"/></typeparam>
		/// <typeparam name="T3">The type of the fourth parameter passed to <paramref name="command"/></typeparam>
		/// <typeparam name="T4">The type of the fifth parameter passed to <paramref name="command"/></typeparam>
		/// <typeparam name="T5">The type of the sixth parameter passed to <paramref name="command"/></typeparam>
		/// <typeparam name="T6">The type of the seventh parameter passed to <paramref name="command"/></typeparam>
		/// <typeparam name="T7">The type of the eighth parameter passed to <paramref name="command"/></typeparam>
		/// <typeparam name="T8">The type of the ninth parameter passed to <paramref name="command"/></typeparam>
		/// <typeparam name="T9">The type of the tenth parameter passed to <paramref name="command"/></typeparam>
		/// <typeparam name="T10">The type of the eleventh parameter passed to <paramref name="command"/></typeparam>
		/// <typeparam name="T11">The type of the twelfth parameter passed to <paramref name="command"/></typeparam>
		/// <typeparam name="T12">The type of the thirteenth parameter passed to <paramref name="command"/></typeparam>
		/// <param name="name">A unique name for this command. Cannot be null or whitespace.</param>
		/// <param name="command">A delegate that is invoked when the command is called from the console.</param>
		/// <param name="description">A short, optional description of the command that appears in a list of all commands.</param>
		/// <exception cref="ArgumentException">Thrown if <paramref name="name"/> is null or empty, or if <paramref name="command"/> is null.</exception>
		/// <exception cref="InvalidOperationException">Thrown if <paramref name="name"/> is taken by another command.</exception>
		public static void RegisterCommand<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12>(string name, Action<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12> command, string description=null)
			=> RegisterCommand(name, (Delegate)command, description);

		/// <summary>
		/// Registers a console command that will parse fourteen arguments and invoke a delegate.
		/// </summary>
		/// <typeparam name="T0">The type of the first parameter passed to <paramref name="command"/></typeparam>
		/// <typeparam name="T1">The type of the second parameter passed to <paramref name="command"/></typeparam>
		/// <typeparam name="T2">The type of the third parameter passed to <paramref name="command"/></typeparam>
		/// <typeparam name="T3">The type of the fourth parameter passed to <paramref name="command"/></typeparam>
		/// <typeparam name="T4">The type of the fifth parameter passed to <paramref name="command"/></typeparam>
		/// <typeparam name="T5">The type of the sixth parameter passed to <paramref name="command"/></typeparam>
		/// <typeparam name="T6">The type of the seventh parameter passed to <paramref name="command"/></typeparam>
		/// <typeparam name="T7">The type of the eighth parameter passed to <paramref name="command"/></typeparam>
		/// <typeparam name="T8">The type of the ninth parameter passed to <paramref name="command"/></typeparam>
		/// <typeparam name="T9">The type of the tenth parameter passed to <paramref name="command"/></typeparam>
		/// <typeparam name="T10">The type of the eleventh parameter passed to <paramref name="command"/></typeparam>
		/// <typeparam name="T11">The type of the twelfth parameter passed to <paramref name="command"/></typeparam>
		/// <typeparam name="T12">The type of the thirteenth parameter passed to <paramref name="command"/></typeparam>
		/// <typeparam name="T13">The type of the fourteenth parameter passed to <paramref name="command"/></typeparam>
		/// <param name="name">A unique name for this command. Cannot be null or whitespace.</param>
		/// <param name="command">A delegate that is invoked when the command is called from the console.</param>
		/// <param name="description">A short, optional description of the command that appears in a list of all commands.</param>
		/// <exception cref="ArgumentException">Thrown if <paramref name="name"/> is null or empty, or if <paramref name="command"/> is null.</exception>
		/// <exception cref="InvalidOperationException">Thrown if <paramref name="name"/> is taken by another command.</exception>
		public static void RegisterCommand<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13>(string name, Action<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13> command, string description=null)
			=> RegisterCommand(name, (Delegate)command, description);

		/// <summary>
		/// Registers a console command that will parse fifteen arguments and invoke a delegate.
		/// </summary>
		/// <typeparam name="T0">The type of the first parameter passed to <paramref name="command"/></typeparam>
		/// <typeparam name="T1">The type of the second parameter passed to <paramref name="command"/></typeparam>
		/// <typeparam name="T2">The type of the third parameter passed to <paramref name="command"/></typeparam>
		/// <typeparam name="T3">The type of the fourth parameter passed to <paramref name="command"/></typeparam>
		/// <typeparam name="T4">The type of the fifth parameter passed to <paramref name="command"/></typeparam>
		/// <typeparam name="T5">The type of the sixth parameter passed to <paramref name="command"/></typeparam>
		/// <typeparam name="T6">The type of the seventh parameter passed to <paramref name="command"/></typeparam>
		/// <typeparam name="T7">The type of the eighth parameter passed to <paramref name="command"/></typeparam>
		/// <typeparam name="T8">The type of the ninth parameter passed to <paramref name="command"/></typeparam>
		/// <typeparam name="T9">The type of the tenth parameter passed to <paramref name="command"/></typeparam>
		/// <typeparam name="T10">The type of the eleventh parameter passed to <paramref name="command"/></typeparam>
		/// <typeparam name="T11">The type of the twelfth parameter passed to <paramref name="command"/></typeparam>
		/// <typeparam name="T12">The type of the thirteenth parameter passed to <paramref name="command"/></typeparam>
		/// <typeparam name="T13">The type of the fourteenth parameter passed to <paramref name="command"/></typeparam>
		/// <typeparam name="T14">The type of the fifteenth parameter passed to <paramref name="command"/></typeparam>
		/// <param name="name">A unique name for this command. Cannot be null or whitespace.</param>
		/// <param name="command">A delegate that is invoked when the command is called from the console.</param>
		/// <param name="description">A short, optional description of the command that appears in a list of all commands.</param>
		/// <exception cref="ArgumentException">Thrown if <paramref name="name"/> is null or empty, or if <paramref name="command"/> is null.</exception>
		/// <exception cref="InvalidOperationException">Thrown if <paramref name="name"/> is taken by another command.</exception>
		public static void RegisterCommand<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14>(string name, Action<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14> command, string description=null)
			=> RegisterCommand(name, (Delegate)command, description);

		/// <summary>
		/// Registers a console command that will parse sixteen arguments and invoke a delegate.
		/// </summary>
		/// <typeparam name="T0">The type of the first parameter passed to <paramref name="command"/></typeparam>
		/// <typeparam name="T1">The type of the second parameter passed to <paramref name="command"/></typeparam>
		/// <typeparam name="T2">The type of the third parameter passed to <paramref name="command"/></typeparam>
		/// <typeparam name="T3">The type of the fourth parameter passed to <paramref name="command"/></typeparam>
		/// <typeparam name="T4">The type of the fifth parameter passed to <paramref name="command"/></typeparam>
		/// <typeparam name="T5">The type of the sixth parameter passed to <paramref name="command"/></typeparam>
		/// <typeparam name="T6">The type of the seventh parameter passed to <paramref name="command"/></typeparam>
		/// <typeparam name="T7">The type of the eighth parameter passed to <paramref name="command"/></typeparam>
		/// <typeparam name="T8">The type of the ninth parameter passed to <paramref name="command"/></typeparam>
		/// <typeparam name="T9">The type of the tenth parameter passed to <paramref name="command"/></typeparam>
		/// <typeparam name="T10">The type of the eleventh parameter passed to <paramref name="command"/></typeparam>
		/// <typeparam name="T11">The type of the twelfth parameter passed to <paramref name="command"/></typeparam>
		/// <typeparam name="T12">The type of the thirteenth parameter passed to <paramref name="command"/></typeparam>
		/// <typeparam name="T13">The type of the fourteenth parameter passed to <paramref name="command"/></typeparam>
		/// <typeparam name="T14">The type of the fifteenth parameter passed to <paramref name="command"/></typeparam>
		/// <typeparam name="T15">The type of the sixteenth parameter passed to <paramref name="command"/></typeparam>
		/// <param name="name">A unique name for this command. Cannot be null or whitespace.</param>
		/// <param name="command">A delegate that is invoked when the command is called from the console.</param>
		/// <param name="description">A short, optional description of the command that appears in a list of all commands.</param>
		/// <exception cref="ArgumentException">Thrown if <paramref name="name"/> is null or empty, or if <paramref name="command"/> is null.</exception>
		/// <exception cref="InvalidOperationException">Thrown if <paramref name="name"/> is taken by another command.</exception>
		public static void RegisterCommand<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15>(string name, Action<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15> command, string description=null)
			=> RegisterCommand(name, (Delegate)command, description);

	}
}
