检测MethodBase的通用参数

时间:2009-12-21 17:51:39

标签: .net generics methodbase

这个问题仍在继续How to distinguish MethodBase in generics

简而言之:在调用不同的泛型类型替换时,我需要在Dictionary中区分相同的泛型方法。

static Dictionary<MethodBase, string> cache = new Dictionary<MethodBase, string>();
static void Method1<T>(T g) 
{
    MethodBase m1 = MethodBase.GetCurrentMethod();
    cache[m1] = "m1:" + typeof(T);
}

所以,我已经覆盖了IEqualityComparer,用于通过参数比较MethodBase参数。在debuging期间,我想知道没有办法检测泛型方法的真实类型的参数,GetGenericArguments和GetParameters都不提供真正的调用类型。我对吗? 如果是这样,我看不到另一种方法,而不是通过第一行Environment.StackTrace进行比较 - 因为只有这种方法才能探索参数的类型。

2 个答案:

答案 0 :(得分:1)

由于泛型方法只有一个MethodBase,因此无法按照您的意愿执行操作。如果需要此功能,则需要使用其他类型作为字典的键,因为在调用泛型方法时,MethodBase本身不包含类型参数。

答案 1 :(得分:0)

我认为StackTrace不会帮助您:我不提供有关调用泛型的实际类型的信息。对我来说,最合理的解决方案是创建自己的类,它将存储有关泛型参数的信息并将其填充到通用方法中。

类似的东西:

static void Method1(T g)         {             Helper m1 = new Helper(T.GetType());              cache [m1] =“m1:”+ typeof(T);         }