public IType GetMostGenericType(ExpressionCollection args) { IType type = GetConcreteExpressionType(args[0]); for (int i = 1; i < args.Count; ++i) { IType newType = GetConcreteExpressionType(args[i]); if (type == newType) continue; type = GetMostGenericType(type, newType); if (IsSystemObject(type)) break; } return type; }