2

多数の関数ですべての関数パラメーターをログに記録する必要があります。

すべてのパラメーターとその値 (または少なくとも .ToString() 値) をプログラムで決定する方法はありますか? おそらく反射によるものでしょうか?

4

2 に答える 2

1

私の知る限り、リフレクションを使用してローカル変数の値を動的にリストして決定する方法はありません。リフレクションを使用してメソッドのパラメーターに関するタイプ情報を取得できますが、宣言されたタイプのみです。リフレクションメタデータは、渡された特定の値ではなく、メソッド定義に関する情報を提供するため、実際の引数に関する情報を自動的に取得することはできません。実行時にそれ。

ただし、次のようなことはできます。

static class Extensions
{
    public static string GetTypeAndValue(this object obj) 
    { 
        return String.Format("{0}: {1}", obj.GetType().Name, obj.ToString()); 
    }
}

次に、ロギングを実行する各メソッド内から、次のような操作を行います。

private void SomeMethodToBeLogged(string some_string, int some_int, bool some_bool)
{
    Logger.Log(String.Format("SomeMethodToBeLogged({0}, {1}, {2})", 
        some_string.GetTypeAndValue(), 
        some_int.GetTypeAndValue(), 
        some_bool.GetTypeAndValue()));
}
于 2009-11-20T20:56:27.330 に答える
1

PostSharp でこれを行う方法の例を次に示します。

http://consultingblogs.emc.com/merrickchaffer/archive/2009/08/04/using-postsharp-to-log-method-entry-and-exit-in-net-code.aspx

自分で巻くこともできます

http://www.developerfusion.com/article/5307/aspect-directional-programming-using-net/3/

于 2009-11-20T20:13:40.230 に答える