多数の関数ですべての関数パラメーターをログに記録する必要があります。
すべてのパラメーターとその値 (または少なくとも .ToString() 値) をプログラムで決定する方法はありますか? おそらく反射によるものでしょうか?
多数の関数ですべての関数パラメーターをログに記録する必要があります。
すべてのパラメーターとその値 (または少なくとも .ToString() 値) をプログラムで決定する方法はありますか? おそらく反射によるものでしょうか?
私の知る限り、リフレクションを使用してローカル変数の値を動的にリストして決定する方法はありません。リフレクションを使用してメソッドのパラメーターに関するタイプ情報を取得できますが、宣言されたタイプのみです。リフレクションメタデータは、渡された特定の値ではなく、メソッド定義に関する情報を提供するため、実際の引数に関する情報を自動的に取得することはできません。実行時にそれ。
ただし、次のようなことはできます。
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()));
}
PostSharp でこれを行う方法の例を次に示します。
自分で巻くこともできます
http://www.developerfusion.com/article/5307/aspect-directional-programming-using-net/3/