Однозначно так.
Якщо ви хочете, щоб об'єкт маніпулював, я фактично використовую таку функцію:
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, де раніше у вас були вписані рядки через ваш код події.