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 が 1 つしかないため、必要なことを行う方法はありません。この機能が必要な場合は、ディクショナリのキーとして他の型を使用する必要があります。これは、ジェネリック メソッドが呼び出されたときに MethodBase だけに型引数が含まれていないためです。

于 2009-12-21T23:26:00.590 に答える
0

StackTrace が役立つとは思いません。ジェネリックが呼び出された実際の型に関する情報は提供しません。私にとって最も合理的な解決策は、ジェネリック パラメーターに関する情報を格納し、それをジェネリック メソッドに入力する独自のクラスを作成することです。

何かのようなもの:

static void Method1(T g) { ヘルパー m1 = new Helper(T.GetType()); cache[m1] = "m1:" + typeof(T); }

于 2009-12-21T18:11:27.217 に答える