public SquaredDistanceExpression(Expression[] components, IExpressionGenerator reductionExpressionGenerator = null)
: base(reductionExpressionGenerator) {
if (null == components) throw new ArgumentNullException("components");
if (components.Length == 0) throw new ArgumentException("Must have at least 1 component.", "components");
if (components.Length % 2 != 0) throw new ArgumentException("Must have an even number of components.", "components");
Contract.Requires(components.All(x => null != x));
Components = components; // TODO: clone?
if (Components.ContainsNull())
throw new ArgumentException("All components expressions must be non null.", "components");
}