5

私は 2 つの類似した (同一ではない) dll を持っています。そのうちの 1 つは実際には他の DLL の一部です。まだ互換性があるかどうかを確認しようとしています (つまり、小さい方がまだ大きい方に完全に含まれているかどうか)。

小さい dll のすべての型を反復処理し、それらの各メソッドが大きい dll にも存在するかどうか (名前とパラメーターのリスト) を確認することで、これを行っています。

問題は、 Assembly.GetMethods() がメソッドとプロパティ getters/setterの両方を返すことです。これは一種のメソッドだと思いますが、この状況ではこれは私にとって悪いことです。

ですから、私の質問は、MethodInfo オブジェクトがプロパティまたは実際のメソッドを格納しているかどうかをどのように判断できますか?

4

4 に答える 4

11

プロパティ アクセサーはspecialname、コンパイラによってマークされます。これはMethodBase.IsSpecialNameMethodInfoオブジェクトで確認できる で確認できます。このプロパティは、演算子のオーバーロードなど、他の特別なメソッドにも当てはまります。

プロパティのゲッターとセッターを除外する別の可能性は、次のクエリです。

from m in typeof(SomeType).GetMethods()
where !typeof(SomeType).GetProperties().Any(p => p.GetGetMethod() == m || p.GetSetMethod() == m)
select m;
于 2012-06-06T08:19:29.420 に答える