1

呼び出し元のメソッドの名前を取得し、その結果に基づいてコードを実行することはできますか?

以下に、データベースの CRUD 操作に使用される 2 つのメソッドを示します。1 つはオブジェクトをデータベースに追加し、もう 1 つは更新します。どちらも、オペレーションの統計レポートを含むオブジェクトを返します。

特定の条件下で、Update メソッド内のオペレーション stat オブジェクトの pkey フィールドをわざわざ更新する必要はありません (それが stat-o​​bj を Add メソッドに返す場合)。

public OperationStat Add(object obj)
{
  // Contains operation status data.
  OperationStat op = new OperationStat();
  op.PrimaryKey = pkey.newkey();

  // Record to update
  Person pete = new Person();

  // call update method.
  op = this.Update(pete);
}

public OperationStat Update(object obj)
{
  OperationStat op = new OperationStat();
  string callmethod = "Add";

  // Get stacktrace.
  StackTrace stackTrace = new StackTrace();
  StackFrame stackFrame = stackTrace.GetFrame(1);
  MethodBase methodBase = stackFrame.GetMethod();

  if(methodBase.Name != callmethod)
  {
   // create new primary key for status.
   op.Primarykey = pkey.newkey();
  }

  // fill operation stat object with details
  return op;
}
4

1 に答える 1

4

.NET 4.5 では、この種の情報を提供するいくつかの新しい属性が導入されています。

CallerMethodNameAttribute:_

メソッドの呼び出し元のメソッドまたはプロパティ名を取得できます。


public OperationStat Update(object obj, [CallerMethodName] string calledFrom = "")
{
  OperationStat op = new OperationStat();
  string callmethod = "Add";

  if(calledFrom != callmethod)
  {
    op.Primarykey = pkey.newkey();
  }

  return op;
}
于 2013-06-08T14:33:47.680 に答える