はこのJavaScriptコードスニペットを考えてみましょう:一般的な、集中型のパラメータロガー方法、C#で
Object.prototype.log = function() {
// here, you have a centralized place to do logging stuff;
console.log(this);
}
function fullName(firstName, lastName)
{
// here, using a simple one-line code, you can log all parameters;
arguments.log();
}
fullName('saeed', 'nemati');
は、我々はC#で、メソッドに渡されたすべてのパラメータを記録するための同様のメカニズムを持つことができますか?
注:私は何をやったかは、リフレクションを使用していたが、成功しません:
public static void LogParameters(this ParameterInfo[] parameters)
{
StringBuilder builder = new StringBuilder();
builder.Append("*****************\r\n");
builder.Append("Parameters\r\n");
parameters.ToList().ForEach(pi =>
{
builder.AppendFormat("{0} => {1}\r\n", pi.Name, pi.DefaultValue);
// The problem is that, I can't get the value of the parameter here
});
builder.Append("*****************");
Log.Write(builder.ToString());
}
public string GetFullName(string firstName, string lastName)
{
MethodBase.GetCurrentMethod().GetParameters().LogParameters();
return firstName + " - " + lastName;
}
GetFullName("saeed", "neamati");
どのように悲しい、そしてどれくらい悪い。 AMAIK、PHPには 'arguments'オブジェクトもあります。知りません。私がこれを行うことができれば、渡されたパラメータの値を見ることで、ライブアプリケーションの問題のトラブルシューティングをより柔軟に行うことができます。同時に、メソッドごとに多くのコード行を書くべきではありません。 : –
@SaeedNeamati:ライブアプリケーションのトラブルシューティングを行う場合は、通常、*ターゲット*ロギングでコンテキストと関連する*引数を説明したいと思っていますが、個人的には役に立たないと思います –
はい、しかし、何度も(時にはそうではない))何かを記録するために、たくさんのコードを書いているのは本当にうんざりです。例えば、** Exception **型の拡張メソッドを既に持っていて、例外的に、ex.Handle();を使って例外を記録するだけです。もちろん、エレガントで、簡単で、集中的で、開発者にやさしいものです。 :) –