private IEnumerable<string> _Iterate(GroupAddressInstance ga)
 {
     switch (Kind)
     {
         case FilterKinds.GroupAddress:
             return IterateGroupAddresses(ga);
         case FilterKinds.GroupAddressDescription:
             return IterateGroupAddressDescriptions(ga);
         default:
             throw new NotImplementedException("Filter Kind is not valid");
     }
 }
 private static IEnumerable<string> IterateGroupAddressDescriptions(GroupAddressInstance ga)
 {
     if (ga.Ref == null)
         yield break;
     yield return ga.Ref.Name;
     if (ga.Ref.ParentRange == null)
         yield break;
     yield return ga.Ref.ParentRange.Name;
     yield return ga.Ref.ParentRange.Description;
     if (ga.Ref.ParentRange.ParentRange == null)
         yield break;
     yield return ga.Ref.ParentRange.ParentRange.Name;
     yield return ga.Ref.ParentRange.ParentRange.Description;
 }
 private static IEnumerable<string> IterateGroupAddresses(GroupAddressInstance ga)
 {
     if (ga.Ref == null)
         yield break;
     yield return ga.Ref.ToString();
 }
 public IEnumerable<string> Iterate(GroupAddressInstance obj)
 {
     return _Iterate(obj).Where(row => !string.IsNullOrEmpty(row));
 }