무한루프라던가 뭔가 걸러내도 몇단계 이후에는 답을 못줄정도로 연산이 너무 오래걸려서 분석이고 뭐고 폐기


    public static IEnumerable<(IEnumerable<object> stack, T result)> Find<T>(object target) => find<T>(target, Enumerable.Empty<object>());

    static IEnumerable<(IEnumerable<object> stack, T result)> find<T>(object? target, IEnumerable<object> stack)

    {

        if (target is ValueType) yield break;

        if (target is null) yield break;

        if (stack.Count() > 4) yield break;

        if (stack.Contains(target)) yield break; //재귀제거

        if (target is T t)

        {

            yield return (stack, t);

            yield break;

        }

        stack = stack.Append(target); //하위를 찾아봐야함.

        if (target is Array e)

        {

            foreach (var i in e)

                foreach (var f in find<T>(i, stack)) yield return f;

            yield break;

        }

        foreach (var pi in target.GetType().GetProperties())

            if (pi.CanRead && pi.GetMethod?.GetParameters() is [])

                foreach (var f in find<T>(pi.GetValue(target), stack)) yield return f;

        foreach (var fi in target.GetType().GetFields())

            foreach (var f in find<T>(fi.GetValue(target), stack)) yield return f;

    }