Вы можете использовать публичный наблюдаемый список для хранения общедоступных данных или просто создать общедоступный метод настройки для хранения данных и получения из соответствующего контроллера
System.Reflection.MethodBase.GetCurrentMethod().Name;
http://msdn.microsoft.com/en-us/library/system.reflection.methodbase.getcurrentmethod.aspx
Отрывок, обеспеченный Lex, был немного длинен, таким образом, я указываю на важную часть, так как никто больше не использовал ту же самую технику:
string MethodName = new StackFrame(0).GetMethod().Name;
Это должно возвратить идентичные результаты MethodBase. GetCurrentMethod () техника.Name , но на это все еще стоит указать, потому что я мог реализовать это однажды в его собственном методе с помощью индекса 1 для предыдущий метод и назвать его от многих различных свойств. Кроме того, это только возвращает один кадр скорее тогда все отслеживание стека:
private string GetPropertyName()
{ //.SubString(4) strips the property prefix (get|set) from the name
return new StackFrame(1).GetMethod().Name.Substring(4);
}
Это - острота, также;)
Попробуйте эту внутреннюю часть Основной метод в пустой консольной программе:
MethodBase method = MethodBase.GetCurrentMethod();
Console.WriteLine(method.Name);
Консольный Вывод:
Main
Да определенно.
, Если Вы хотите объект управлять, я на самом деле использую функцию как это:
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, где ранее у Вас были строки, замусоренные на всем протяжении Вашего кода события.
РЕДАКТИРОВАНИЕ: MethodBase является, вероятно, лучшим способом просто получить метод, Вы находитесь в (в противоположность целой стопке вызова). Я был бы все еще обеспокоен встраиванием как бы то ни было.
можно использовать StackTrace в рамках метода:
StackTrace st = new StackTrace(true);
И взгляд на кадры:
// The first frame will be the method you want (However, see caution below)
st.GetFrames();
Однако знать, что, если метод встраивается, Вы не будете в методе, Вы думаете, что Вы. Можно использовать атрибут для предотвращения встраивания:
[MethodImpl(MethodImplOptions.NoInlining)]
Как насчет этого это:
StackFrame frame = new StackFrame(1);
frame.GetMethod().Name; //Gets the current method name
MethodBase method = frame.GetMethod();
method.DeclaringType.Name //Gets the current class name
Я думаю, что необходимо быть в состоянии получить это от создания StackTrace. Или, как edg и упоминание Lars MГ ¦ hlum , MethodBase. GetCurrentMethod ()