public static bool Evaluate(this StringOperator @operator, string?value, string?comparisonValue) { @operator.Validate(nameof(@operator)); var isOdd = ((int)@operator) % 2 == 1; return(EvaluateInternal(isOdd ? @operator + 1 : @operator) ^ isOdd); bool EvaluateInternal(StringOperator effectiveOperator) { return(effectiveOperator switch { StringOperator.Equals => string.Equals(value, comparisonValue, StringComparison.OrdinalIgnoreCase), StringOperator.EqualsExact => string.Equals(value, comparisonValue, StringComparison.Ordinal), StringOperator.Contains => comparisonValue == null || (value == null ? comparisonValue.Length == 0 : value.IndexOf(comparisonValue, StringComparison.OrdinalIgnoreCase) >= 0), StringOperator.StartsWith => comparisonValue == null || (value == null ? comparisonValue.Length == 0 : value.StartsWith(comparisonValue, StringComparison.OrdinalIgnoreCase)), StringOperator.EndsWith => comparisonValue == null || (value == null ? comparisonValue.Length == 0 : value.EndsWith(comparisonValue, StringComparison.OrdinalIgnoreCase)), StringOperator.EqualInLength => (value?.Length ?? 0) == (comparisonValue?.Length ?? 0), StringOperator.ShorterThan => (value?.Length ?? 0) < (comparisonValue?.Length ?? 0), StringOperator.LongerThan => (value?.Length ?? 0) > (comparisonValue?.Length ?? 0), _ => throw new NotSupportedException($"StringOperator of {@operator} is not supported"), }); }
public static StringOperator Invert(this StringOperator @operator) { @operator.Validate(nameof(@operator)); return(@operator + (((int)@operator) % 2 == 0 ? 1 : -1)); }