1

这个问题是如何在泛型中区分 MethodBase 的继续

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

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 参数。在调试过程中,我想知道没有办法检测泛型方法的真实参数类型,GetGenericArguments 和 GetParameters 都不提供真实类型的调用。我对吗?如果是这样,除了通过第一行 Environment.StackTrace 进行比较之外,我看不到其他方法 - 因为只有这种方法才能探索参数的类型。

4

2 回答 2

1

由于泛型方法只有一个 MethodBase,所以没有办法做你想做的事。如果需要此功能,则需要使用其他类型作为字典的键,因为在调用泛型方法时,仅 MethodBase 不包含类型参数。

于 2009-12-21T23:26:00.590 回答
0

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

就像是:

static void Method1(T g) { Helper m1 = new Helper(T.GetType()); 缓存[m1] = "m1:" + typeof(T); }

于 2009-12-21T18:11:27.217 回答