public bool CanCallWith(IEnumerable<Variable> vars) { using(var var_enum = vars.GetEnumerator()) using(var sig_enum = ParamTypes.GetEnumerator()) { bool more_vars = false; bool more_sig =false; while( (more_sig = sig_enum.MoveNext()) && (more_vars = var_enum.MoveNext()) && sig_enum.Current.IsAssignableFrom(var_enum.Current.Type)); if(more_sig || more_vars) return false; } return true; }