質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Q&A

解決済

1回答

9664閲覧

現在のプロジェクトのmethodの引数を一覧したいです。

退会済みユーザー

退会済みユーザー

総合スコア0

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

0グッド

1クリップ

投稿2016/02/22 07:58

編集2016/02/24 12:49

C#, VisualStudio2013での質問です。
現在のプロジェクトのmethodを引数を一覧したいです。
method名だけなら下記のとおり。
currentの引数も出せますが、すべてのはできてないです。
お知恵拝借。

using System.Reflection;

//ClassクラスのTypeオブジェクトを取得する
Type t = typeof(test.Form1);

//メンバを取得する
MemberInfo[] members = t.GetMembers(
BindingFlags.Public | BindingFlags.NonPublic |
BindingFlags.Instance | BindingFlags.Static |
BindingFlags.DeclaredOnly);

string allmethods = "";
foreach (MemberInfo m in members) {
//メンバの型と、名前を表示する
if (m.MemberType == MemberTypes.Method) {

MethodInfo method = (MethodInfo)m;
//戻り値の型
string returntype = method.ReturnType.Name;

Console.WriteLine("{0} - {1}", returntype, m.Name); //引数は? //自メソッドの第一引数名を取得 //string paramName = (new System.Diagnostics.StackTrace()).GetFrame(0).GetMethod().GetParameters()[0].Name; //改良版 //string paramName = System.Reflection.MethodBase.GetCurrentMethod().GetParameters()[0].Name; }

}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

argius

2016/02/24 11:38

タグが"C"になっていますが、C#のご質問ですので、"C#"に変更していただけますでしょうか。
退会済みユーザー

退会済みユーザー

2016/02/24 12:50

修正しました。
argius

2016/02/24 13:05

ありがとうございます。
guest

回答1

0

ベストアンサー

メソッドのパラメータを列挙したいのであれば、
ご自身で書いているとおりGetParametersメソッドを使えば良いです。

GetParametersは配列を返しますが列挙が苦手なのでしょうか。
method.GetParameters()をforeachで回しても良いですし、
パラメータ名のみをコンマ区切りで表示するだけで良ければ以下のようにも書けます。

C#

1Console.WriteLine(string.Join(",", method.GetParameters().Select(p => p.Name)));

投稿2016/02/22 15:40

編集2016/02/24 11:33
nakit

総合スコア410

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2016/02/23 01:48

ばっちりです。 できました。 ありがとうございます。 break pointでmethodの中身を見ても、引数が入っていなかったのですが、 method.GetParameters()のようにmethodで取得するのですね。 こういうのって、どうやって調べるものですか? msdn? 長年の勘?
nakit

2016/02/24 11:34

知らないクラスやメソッド等は基本的にMSDNサイトを確認するのは手っ取り早いですね。 「思い込み」や「なんとなく」で手を動かしても「たまたま動作する」可能性はありますが大抵良い結果は得られません。また、きちんとした仕様を調べた結果は自分の身に付き易いでしょう。 余談ですがブレークポイントでmethod変数の中身をよくよく調べたらパラメータも見つかるかと思われます。
退会済みユーザー

退会済みユーザー

2016/02/24 12:54

おっしゃるとおりですね。 コードを勉強するときは、1文字(1単語)でもわからないと、そこが穴になって水漏れするので、なんども繰り返し勉強して、穴をふさぐようにしています。充分時間があるとできるのですが、ふだんはそこまで時間がないこともあって。 ちなみに充分時間があるというのは、たとえば100時間くらいあるとかなりいい感じだと思っています。いま実感してて。 (AndroidとASP.NETを重点的に勉強中です)。 ブレークポイントでmethodのなかみはかなりだいぶ見たのですが、今回の場合はどのツリーにあります? 見つからなかったな~。う~む。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問