public bool CanRun(Character @char) { var sub = Sub.Find(x => x.Allowed.Any(y => y == @char.Class)); if (sub == null) { return(false); } var conditions = Conditions.FindAll(x => x.Index == sub.Index || x.Index == -1); return(conditions.TrueForAll(x => x.CanRun(@char))); }