public bool TryGet <TArguments, T>(TArguments arguments, ObjectRelativePredicate <TArguments, T> predicate, out T target) where T : class
        {
            if (predicate == null)
            {
                throw new ArgumentNullException(nameof(predicate));
            }

            foreach (TObject element in m_objects)
            {
                target = element as T;

                if (target != null && predicate(arguments, target))
                {
                    return(true);
                }
            }

            target = default;
            return(false);
        }
 public T Get <TArguments, T>(TArguments arguments, ObjectRelativePredicate <TArguments, T> predicate) where T : class
 {
     return(TryGet(arguments, predicate, out T target) ? target : throw new ArgumentException($"Target not found by the specified type and arguments: '{typeof(T)}, '{arguments}'."));
 }