1

是否可以获取调用方法的名称,并根据这些结果执行代码?

下面,我有两种用于数据库 CRUD 操作的方法。一个向数据库添加一个对象,另一个更新。两者都返回一个包含操作统计报告的对象。

在某些情况下,如果将 stat-o​​bj 返回到 Add 方法,我不会费心在 Update 方法中更新操作 stat 对象的 pkey 字段。

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 回答