<PackageReference Include="Newtonsoft.Json" Version="12.0.3" />

CompositeExpression

using System; using System.Collections.Generic; using System.Runtime.CompilerServices; namespace Newtonsoft.Json.Linq.JsonPath { [System.Runtime.CompilerServices.NullableContext(1)] [System.Runtime.CompilerServices.Nullable(0)] internal class CompositeExpression : QueryExpression { public List<QueryExpression> Expressions { get; set; } public CompositeExpression(QueryOperator operator) : base(operator) { Expressions = new List<QueryExpression>(); } public override bool IsMatch(JToken root, JToken t) { List<QueryExpression>.Enumerator enumerator; switch (Operator) { case QueryOperator.And: enumerator = Expressions.GetEnumerator(); try { while (enumerator.MoveNext()) { if (!enumerator.Current.IsMatch(root, t)) return false; } } finally { ((IDisposable)enumerator).Dispose(); } return true; case QueryOperator.Or: enumerator = Expressions.GetEnumerator(); try { while (enumerator.MoveNext()) { if (enumerator.Current.IsMatch(root, t)) return true; } } finally { ((IDisposable)enumerator).Dispose(); } return false; default: throw new ArgumentOutOfRangeException(); } } } }