4

CQLINQ を使用して、現在のメソッドの入力引数のコレクションを取得するにはどうすればよいですか? 「Arguments」や「Parameters」のような「NbParamenter」のみのコレクションがあり、私の目的には適していません。

4

1 に答える 1

3

実際、CQLinqにはまだこの機能がありません。ただし、多くの場合、IMethodのプロパティICodeElement.NameおよびIMember.FullNameには、パラメータータイプの名前のコマ区切りリストが含まれているため、補正できます。たとえば、FullNameこれがメソッドの例です。

System.Windows.Forms.Control.BeginInvoke(Delegate,Object[])

そしてここにありますName

BeginInvoke(Delegate,Object[])

たとえば、イベントハンドラーメソッドと一致するようにパラメータータイプ名を利用するCQLinqルールを次に示します。

// <Name>Event handler methods should be declared private</Name>
warnif count > 0
from m in Application.Methods where 
  !m.IsPrivate &&

   // A method is considered as event handler if...
   m.NbParameters == 2 &&            // ...it has two parameters..
   m.Name.Contains("Object") &&    // ...of types Object...
   m.Name.Contains("EventArgs") && // ...and EventArgs

   // Discard special cases
  !m.ParentType.IsDelegate &&
  !m.IsGeneratedByCompiler

select new { m,m.Visibility }
// This rule implementation relies on the facts that:
// -> A method name contains the type of its parameters.
// -> All EventArgs derived types have the suffix "EventArgs".
于 2012-10-19T07:29:44.830 に答える