Calculates a custom function returning a FunctionValue given a list of FunctionValue arguments and the function's current Cell for context.

FunctionValue Calculate(IList<FunctionValue> args, Cell currentCell)
Function Calculate(args As IList(Of FunctionValue), currentCell As Cell) As FunctionValue

An ordered list of FunctionValue arguments that have already been fully evaluated.

The Cell that the current function resides in to use for context sensitive operations

A FunctionValue that contains the resulting value of the function.

        public FunctionValue Calculate(IList<FunctionValue> args, Cell currentCell)
        {
            StringBuilder result = new StringBuilder("");
            foreach (FunctionValue arg in args)
            {
                result.Append(',');
                switch (arg.Type)
                {
                    case FunctionValueType.BOOLEAN:
                        result.Append((bool)arg.Value ? "True" : "False");
                        break;
                    case FunctionValueType.STRING:
                        result.Append(arg.Value);
                        break;
                    case FunctionValueType.NUMBER:
                        result.Append(((double)arg.Value).ToString("0.#####"));
                        break;
                    case FunctionValueType.NULL:
                        result.Append(' ');
                        break;
                    case FunctionValueType.RANGE:
                        result.Append(arg.Value.ToString());
                        break;
                }
            }
            return new FunctionValue(result.ToString());
        }
    Public Function Calculate(args As IList(Of FunctionValue), currentCell As Cell) As FunctionValue
        Dim result As New StringBuilder("")
         
        For Each arg As FunctionValue In args
            result.Append(",")
 
            Select Case arg.Type
                Case FunctionValueType.[BOOLEAN]
                    result.Append(If(CBool(arg.Value), "True", "False"))
                    Exit Select
                Case FunctionValueType.[STRING]
                    result.Append(arg.Value)
                    Exit Select
                Case FunctionValueType.NUMBER
                    result.Append(CDbl(arg.Value).ToString("0.#####"))
                    Exit Select
                Case FunctionValueType.NULL
                    result.Append(" ")
                    Exit Select
                Case FunctionValueType.RANGE
                    result.Append(arg.Value.ToString())
                    Exit Select
            End Select
        Next
        Return New FunctionValue(result.ToString())
    End Function