public static bool TryParsePositionPreferenceAndGrade(string value, out PositionPreferenceAndGrade positionPreferenceAndGrade)
 {
     positionPreferenceAndGrade = new PositionPreferenceAndGrade()
     {
         position = new PositionPreference(Position.None), grade = Grade.G1
     };
     string[] options = value.Split(new string[] { "or", "and", "&", "|", "/", "\\", " " }, StringSplitOptions.RemoveEmptyEntries);
     if (options.Length == 0)
     {
         return(false);
     }
     if (!TryParsePosition(options[0], out positionPreferenceAndGrade.position.primary))
     {
         return(false);
     }
     if (options.Length == 1)
     {
         return(true);
     }
     if (TryParsePosition(options[1], out Position secondary))
     {
         positionPreferenceAndGrade.position.secondary = secondary;
         if (options.Length == 2)
         {
             return(true);
         }
         return(TryParseGrade(options[2], out positionPreferenceAndGrade.grade));
     }
     else if (TryParseGrade(options[1], out positionPreferenceAndGrade.grade))
     {
         if (options.Length == 2)
         {
             return(true);
         }
         return(TryParsePosition(options[2], out positionPreferenceAndGrade.position.secondary));
     }
     return(false);
 }
 public static string ToUserFriendlyString(this PositionPreferenceAndGrade positionPreferenceAndGrade)
 {
     return(positionPreferenceAndGrade.position.ToUserFriendlyString() + " " + positionPreferenceAndGrade.grade.ToUserFriendlyString());
 }
 public static string Abbreviation(this PositionPreferenceAndGrade positionPreferenceAndGrade)
 {