internal static Component ToComponent(Evaluatable thing) { if (thing is Expression) { return ToComponent((Expression)thing); } if (thing is Component) { return ToComponent((Component)thing); } if (thing is Factor) { return ToComponent((Factor)thing); } if (thing is ComponentListFactor) { var clf = (ComponentListFactor)thing; if (clf.IsInNumerator) { return ToComponent(clf.Factor); } return new SingleFactorComponent(new ExpressionFactor(new SingleComponentExpression(new ComponentList(new List<ComponentListFactor> { clf })))); } throw new UnexpectedTypeException(thing.GetType()); }