AbstractMatcher.cs 1.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. using System.Collections.Generic;
  2. using System.Linq;
  3. namespace InABox.WPF
  4. {
  5. public enum MatchComparison
  6. {
  7. EqualTo,
  8. NotEqualTo
  9. }
  10. public enum MatchType
  11. {
  12. Any,
  13. All
  14. }
  15. public class AbstractMatcher<T> : AbstractMultiConverter<T,bool>
  16. {
  17. public MatchComparison Comparison { get; set; }
  18. public MatchType Type { get; set; }
  19. public T Value { get; set; }
  20. protected override bool Convert(IEnumerable<T> value, object parameter = null)
  21. {
  22. var result = Type switch
  23. {
  24. MatchType.Any => Comparison == MatchComparison.EqualTo
  25. ? value.Any(x => Equals(Value, x))
  26. : value.Any(x => !Equals(Value, x)),
  27. MatchType.All => Comparison == MatchComparison.EqualTo
  28. ? value.All(x => Equals(Value, x))
  29. : value.All(x => !Equals(Value, x)),
  30. _ => false
  31. };
  32. return result;
  33. }
  34. }
  35. }