我有一个称为存储库的通用类。此类具有通过使用不同的泛型参数初始化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。