我有一个称为存储库的通用类。此类具有通过使用不同的泛型参数初始化Repository类的新实例来“调用自身”的功能。这种“递归”可以继续进行-因此,为了避免StackOverflowException,我需要检查堆栈中是否存在这种方法,该方法是从Repository类中调用的,具有相同的泛型参数。
这是我的代码:

    StackTrace stack = new StackTrace();
    StackFrame[] frames = stack.GetFrames();

    foreach (StackFrame frame in frames)
    {
        Type callingMethodClassType = frame.GetMethod().DeclaringType;
        if (callingMethodClassType.IsGenericType)
        {
            // BUG HERE in getting generic arguments of the class in stack
            Type genericType = callingMethodClassType.GetGenericArguments()[0];
            if (genericType.Equals(entityType))
            {
                wasAlready = true;
                break;
            }
        }
    }


泛型类型始终返回T,而不是正确的类型,例如“ User”或“ Employee”。我无法比较类型的名称,因为T没有名称。

最佳答案

不要以为这是可能的,因为您只能获取GenericType,而不能获取该类的真实GenericArguments。

如果查看frame.GetMethod()。DeclaringType的返回,您会注意到,调试结果中仅包含GenericType,而没有真正的GenericArguments。

10-01 21:59