using System.Collections.Generic;
public static void Main()
Dimensions = Dimensions.Two,
var operations = _operationConditions
.Where(pair => pair.Value.All(condition => condition(item)))
.Select(pair => pair.Key)
foreach (var op in operations) op(item);
private static Dictionary<Action<SomeItem>, Func<SomeItem, bool>[]> _operationConditions =
new Dictionary<Action<SomeItem>, Func<SomeItem, bool>[]>
{ Do.Rotate(45), new [] { If.TwoDim, If.Green } },
{ Do.Delete(), new [] { If.ThreeDim, If.Red } }
public Color Color { get; set; }
public Dimensions Dimensions { get; set; }
public void Rotate(double degrees)
Console.WriteLine("I was rotated {0} degrees", degrees);
Console.WriteLine("I was deleted :(");
public static bool TwoDim(this SomeItem item)
=> item.Dimensions == Dimensions.Two;
public static bool ThreeDim(this SomeItem item)
=> item.Dimensions == Dimensions.Three;
public static bool Green(this SomeItem item)
=> item.Color == Color.Green;
public static bool Red(this SomeItem item)
=> item.Color == Color.Red;
public static Action<SomeItem> Rotate(double degrees)
=> item => item.Rotate(degrees);
public static Action<SomeItem> Delete()
=> item => item.Delete();