Code/Functions/String/ConcatFunction.cs
using System;
using System.Collections;
using System.Text;
using Expressive.Expressions;
namespace Expressive.Functions.String
{
internal class ConcatFunction : FunctionBase
{
#region FunctionBase Members
public override string Name
{
get
{
return "Concat";
}
}
public override object Evaluate(IExpression[] parameters, Context context)
{
//We can accept 1 parameter that is an array
this.ValidateParameterCount(parameters, -1, 1);
StringBuilder sb = new StringBuilder();
//Recursive method if some parameters are arrays
Evaluate(sb, parameters, context);
//return the final full string
return sb.ToString();
}
protected virtual void Evaluate(StringBuilder sb, IEnumerable parameters, Context context)
{
foreach (var p in parameters)
{
object value;
if (p is IExpression expression)
{
value = expression.Evaluate(Variables);
}
else
{
value = p;
}
if (null == value)
{
continue;
}
else if(value is string)
{
sb.Append(value);
}
else if(value is IEnumerable enumerate)
{
Evaluate(sb, enumerate, context);
}
else
{
string s = value.ToString();
sb.Append(s);
}
}
}
#endregion
}
}