public IExcangeAction Excange(IHousehold MyHousehold, IExchangeRules ExchangeRules)
        {
            foreach (AnimalKind animalKinndFrom in Enum.GetValues(typeof(AnimalKind)))
            {
                bool started = false;
                foreach (AnimalKind animalKinndTo in Enum.GetValues(typeof(AnimalKind)))
                {
                    if (started)
                    {
                        var animalFrom = Animal.GetAnimal(animalKinndFrom);
                        var animalTo   = Animal.GetAnimal(animalKinndTo);

                        if ((animalFrom.IsWild) || (animalTo.IsWild))
                        {
                            continue;
                        }
                        if (
                            (MyHousehold.GetAnimalCount(animalFrom) > 0)
                            &&
                            (((MyHousehold.GetAnimalCount(animalTo) == 0) || ((animalTo.Kind != AnimalKind.SmallDog) && (animalTo.Kind != AnimalKind.BigDog))))
                            &&
                            (ExchangeRules.TryGetAction(animalFrom, MyHousehold.GetAnimalCount(animalFrom), animalTo, out IExcangeAction result, out string errorMessage))
                            &&
                            ((MyHousehold.GetAnimalCount(animalFrom) - result.AnimalFromCount) > 0)
                            )
                        {
                            return(result);
                        }
                    }
                    started = (started || (animalKinndFrom == animalKinndTo));
                }
            }
            return(null);
        }