はい、間違いなく。
オブジェクトを操作したい場合は、次のような関数を実際に使用します。
public static T CreateWrapper<T>(Exception innerException, params object[] parameterValues) where T : Exception, new()
{
if (parameterValues == null)
{
parameterValues = new object[0];
}
Exception exception = null;
StringBuilder builder = new StringBuilder();
MethodBase method = new StackFrame(2).GetMethod();
ParameterInfo[] parameters = method.GetParameters();
builder.AppendFormat(CultureInfo.InvariantCulture, ExceptionFormat, new object[] { method.DeclaringType.Name, method.Name });
if ((parameters.Length > 0) || (parameterValues.Length > 0))
{
builder.Append(GetParameterList(parameters, parameterValues));
}
exception = (Exception)Activator.CreateInstance(typeof(T), new object[] { builder.ToString(), innerException });
return (T)exception;
}
この行:
MethodBase method = new StackFrame(2).GetMethod();
スタックフレームを上に移動して呼び出しメソッドを見つけ、次にリフレクションを使用して、一般的なエラー報告関数に渡されるパラメーター情報値を取得します。現在のメソッドを取得するには、代わりに現在のスタックフレーム(1)を使用します。
他の人が現在のメソッド名について言ったように、あなたも使うことができます:
MethodBase.GetCurrentMethod()
内部でそのメソッドを見ると、とにかくStackCrawlMarkを作成するだけなので、スタックを歩くのが好きです。スタックのアドレス指定は直接私にはより明確に思えます
4.5以降では、[CallerMemberNameAttribute]をメソッドパラメータの一部として使用して、メソッド名の文字列を取得できます。これは、いくつかのシナリオで役立ちます(ただし、実際には上記の例のようになっています)。
public void Foo ([CallerMemberName] string methodName = null)
これは主に、以前はイベントコード全体に文字列が散らばっていたINotifyPropertyChangedサポートの解決策のようでした。