//===========================================================================================
		private void WriteParameterTypes(IndentedTextWriter writer, MethodBase method, ParameterMode mode)
		{
			ParameterInfo[] parameters = method.GetParameters();
			if (parameters.Length == 0)
				return;

			if (mode.HasFlag(ParameterMode.AddColon))
				writer.Write(", ");

			writer.Write("new Type[] {");
			for (int i = 0; i < parameters.Length; i++)
			{
				if (i > 0)
					writer.Write(", ");

				Type type = GetIEnumerable(parameters[i]);
				if (type != null)
				{
					writer.Write("Types.IEnumerable");
					WriteType(writer, type);
				}
				else
				{
					WriteTypeOf(writer, parameters[i].ParameterType);
				}
			}
			writer.Write("}");
		}
		//===========================================================================================
		private void WriteParameters(IndentedTextWriter writer, ParameterMode mode, params ParameterInfo[] parameters)
		{
			for (int i = 0; i < parameters.Length; i++)
			{
				if (i > 0 || mode.HasFlag(ParameterMode.AddColon))
					writer.Write(", ");

				if (mode.HasFlag(ParameterMode.Type))
				{
					if (parameters[i].GetCustomAttribute<ParamArrayAttribute>() != null)
						writer.Write("params ");

					WriteType(writer, parameters[i].ParameterType);
					writer.Write(" ");
				}

				if (mode.HasFlag(ParameterMode.Instance) && (_Types.Contains(parameters[i].ParameterType) || parameters[i].ParameterType == typeof(object)))
				{
					WriteType(writer, parameters[i]);
					writer.Write(".GetInstance(");
					writer.Write(parameters[i].Name);
					writer.Write(")");
				}
				else
				{
					if (mode.HasFlag(ParameterMode.Instance))
					{
						if (WriteIEnumerableParameter(writer, parameters[i]))
							continue;
					}

					if (!mode.HasFlag(ParameterMode.Type) && mode.HasFlag(ParameterMode.Name) && IsArray(parameters[i].ParameterType))
						writer.Write("casted_");

					writer.Write(parameters[i].Name);
				}
			}
		}