DOBON.NET DOBON.NETプログラミング掲示板過去ログ

メソッドのパラメータを取得する方法

環境/言語:[Windowx XP Pro / VS2005]
分類:[.NET]

じゅでです。
こちらの掲示板には、いつもお世話になっております。

今回の質問は、以下のとおりとなります。

現在デバッグ用にログファイルを落とそうとしております。
そこで、メソッドのパラメータ名と、メソッドを呼び出した際の
パラメータ内容の取得をするような方法を探しております。

System.Reflection.ParameterInfo[] plmInfoList = System.Reflection.MethodInfo.GetCurrentMethod().GetParameters();
StringBuilder hoge = new StringBuilder();

foreach (System.Reflection.ParameterInfo plmInfo in plmInfoList)
{
hoge.Append(plmInfo.ToString());
hoge.Append(":");
hoge.ここでパラメータの内容を取得したい。
}

自分自身のメソッドについては、System.Reflectionで取得できるのですが、
パラメータの内容も取れたりするでしょうか?
取れると思っていたのですが、デバッグ実行で中身を追ってみたところ、
中身が格納されていそうな場所がなかったので、質問させていただきました。

もしご存知の方がいらっしゃいましたら、ご教授いただけないでしょうか。

お忙しいとは思いますが、よろしくお願いいたします。

以上
全然わからんのですが(汗
出来ない原因は、型とインスタンスの違いということだろうと思います。
2007/11/12(Mon) 22:57:16 編集(投稿者)

■No20953に返信(まどかさんの記事)
> 全然わからんのですが(汗

申し訳ないです。毎回の事ですが、説明が悪いです。
本当にすいません。

やりたいことは、以下のようなメソッドがある場合に、メソッドの
パラメータ名と、パラメータの値がほしいのです。

private void Sample(string str1, string str2, bool flag)
{
}

ただし、パラメータの内容が変わるたびに、一つ一つパラメータ名と
パラメータに入っている値を取得するのも、手間がかかるので、
何とか取得する方法はないかとさがしております。

パラメータの名称と型までは、取得できるのですが、
肝心の中身の値についての取得方法がわかりません。

HPなどを検索してみたのですが、見つからなかったので質問させていただきました。

また、独自クラスなどは、全てToString()を作った人が実装しているものとして
いただいていいです。

DataTableなどについても、除外していただいてかまいません。

まだ判りにくい部分がありましたら、ご質問下さい。
よろしくお願いいたします。

以上

追記

> 出来ない原因は、型とインスタンスの違いということだろうと思います。

なんとなく言いたい事はわかります。
そうですよね、今見ているのは、メソッド自身の型?ですもんね。
何とかなるとうれしいですが、なんともならないものなのでしょうか。
お知恵をお貸し下さい。
よろしくお願いいたします。
> ■No20953に返信(まどかさんの記事)
>>全然わからんのですが(汗
>
> 申し訳ないです。毎回の事ですが、説明が悪いです。
> 本当にすいません。

いやいや、私が答えられないという意味です。
すいません。
■No20955に返信(まどかさんの記事)

申し訳ないです。
毎回私が、わかりにくい書き方をしている為、余計なお手間を
とらせてしまいました。

色々調べてみてはいますが、今の所、見つかっておりません。

引き続き、質問の件よろしくお願いいたします。

以上

> いやいや、私が答えられないという意味です。
> すいません。
■No20957に返信(じゅでさんの記事)
>現在デバッグ用にログファイルを落とそうとしております。
>そこで、メソッドのパラメータ名と、メソッドを呼び出した際の
>パラメータ内容の取得をするような方法を探しております。

こんにちは〜〜見当ちがいかも、ですが・・・
VB2005 Expressには、無いのですが、説明によると、
「[呼び出し履歴] ウィンドウには、各関数の名前と記述に使用されたプログラミング言語が表示されます。関数名やプロシージャ名には、モジュール名、行番号、バイト オフセット、パラメータ名、型、値などのオプション情報が指定されている場合があります。」
VB2003でブレークポイントをセットして、実行したら、確かに
パラメータ名、型、値が表示されましたよ!
> VB2003でブレークポイントをセットして、実行したら、確かに
> パラメータ名、型、値が表示されましたよ!

デバッガの機能なので
正解ならSystem.Diagnosticsですね。
返信がおくれて申し訳ありません。

y4yama様、まどか様ありがとうございます。

ここですね。
ttp://msdn2.microsoft.com/ja-jp/library/system.diagnostics(VS.80).aspx

ちょっと探してみます。

見つけるのが、ちょっと大変そうなので、申し訳ないですが、
解決済みはしばしお待ち下さい。

見つかり次第、こちらにのっけます。

また、見つからずに、助けを求めるかも知れませんので、
その際はよろしくお願いいたします。

お二方、本当にあがりがとうございました。
■No20962に返信(じゅでさんの記事)
StackTraceをみてみましたが、やっぱり、StackTraceのParameterInfoには、
メソッドの名称しかないと・・・
贅沢を言うと呼び順だけじゃなくて、どんな値で呼び出されたかをもってて
ほしいですが、そんな事は無いと。
(見落としたのかもしれませんが・・・)

どんな値で呼び出されたかもっててくれてもいいのにorz

ここでもっててくれれば、メソッドを共通化して、一つ前のメソッドの
中身を見ればいいともおもったのですが、なかなか上手くいかないものですね。

System.Diagnostics.StackTrace st = new System.Diagnostics.StackTrace();

System.Diagnostics.StackFrame[] stList = st.GetFrames();

foreach (System.Diagnostics.StackFrame stTarget in stList)
{
Console.WriteLine(stTarget.GetMethod());
System.Reflection.ParameterInfo[] prmInfoList = stTarget.GetMethod().GetParameters();
foreach (System.Reflection.ParameterInfo prmInfo in prmInfoList)
{

}
}

調査は続行中であります。
どなたかご存知の方がいらっしゃいましたら、よろしくお願いいたします。

以上

DOBON.NET | プログラミング道 | プログラミング掲示板