0

クラスのすべての静的発生を表示する方法を探します (Visual Studio の機能に似ています: すべての参照を検索します)。

手動ではなくコードでのみ行う必要があります。

したい

  1. 特定の属性を持つクラスのみを一覧表示する
  2. それへの静的参照を持つすべてのクラスを一覧表示します (データ クラスへのテーブル バインディングを検索します)。

私の最初のステップは、私が興味を持っているすべてのタイプをリストすることです:

            var result = from t in assembly.GetTypes()
                         where t.IsDefined(typeof(TAttribute), inherit)
                         select t;

            return result.ToList();

2番目のステップに問題があります。プロパティを見つける方法を知っています...クラスから。しかし、逆にクラスのすべての使用箇所を見つけるにはどうすればよいでしょうか。

4

2 に答える 2

3

リフレクションを使用して静的参照を見つけることはできません。それASTは知っているかもしれません。このために、Roslyn (Compiler as a Service) を使用すると、コンパイルして AST を調査できます。

于 2013-01-14T07:53:21.887 に答える
1

リフレクションを使用してメソッド本体で参照を見つけることはできませんが、フィールド、プロパティ、およびメソッドのパラメーター/戻り値を見つけることができます。

すべてのタイプをリストする方法はすでに知っていますが、タイプごとに次のようになります。

Type.GetPropertiesの配列を返しますPropertyInfo。気になるタイプのリストに「PropertyInfo.ProeprtType」が含まれているかどうかを確認できます。

同じことがフィールドにも当てはまりますType.GetFields

呼び出すメソッドの場合、これはオブジェクトType.GetMethodsの配列を返し、チェックする戻り値の型を取得し、パラメーターの呼び出しとMethodInfoMethodInfo.ReturnTypeMethodInfo.GetParametersParameterInfo.ParameterType

メソッド本体内で定義されたローカル変数のみが残り、それらはリフレクションでアクセスできません

于 2013-01-14T08:22:39.120 に答える