1

オブジェクトのタイプが事前にわかっているメソッドがあり、そのオブジェクトを (そのタイプとともに) メソッドに渡す必要があります。たとえば、次のようになります。

public void foo()
{
  string type_of_object = "person";
  person p = new person();

  // insert code here
}

public T method<T>(object obj)
{
  // some functions go here
  return (T)...
}

対処しなければならない型が何百もある可能性があることを考えると、各型に対して switch ステートメントを実行したくありません。これらの行に沿って何かを行う方法を理解できないようです:

var foo = method<person.GetType()>(p);

テイカーはいますか?

4

2 に答える 2

3

反射を使用できます。あなたの場合は次のようになります:

MethodInfo method = this.GetType().GetMethod("method");
MethodInfo generic = method.MakeGenericMethod(p.GetType());
generic.Invoke(this, p);

この応答を確認してください:リフレクションを使用してジェネリック メソッドを呼び出すにはどうすればよいですか?

于 2013-07-09T21:24:55.967 に答える
0

リフレクション ライブラリがこれに役立つと思います。リフレクションは遅くなる可能性がありますが、プログラムの最初に文字列から型への辞書を作成すると、速度を上げることができます。

var dict = Assembly.GetExecutingAssembly().GetTypes().ToDictionary(t => t.Name, t => t);

次に、独自のコードで次のようにします。

Type targetType;
if (!dict.TryGet(type_of_object, out targetType)) {
  // log error with unknown type
}

編集者ではなく回答ボックスに書いたので、簡単なことを見逃していたらすみません。また、あなたの「いくつかの機能」がどうなるかについても、完全にはわかりません。また、私のコードは、別々の名前空間にある同じ名前の複数の型を考慮していません。「String、Int32...」以上のことをしている場合は、それを検討することをお勧めします。

于 2013-07-09T21:22:04.800 に答える