将变量设置为包含方法';的名字
本文关键字:方法 变量 设置 包含 | 更新日期: 2024-09-23 07:49:02
这看起来应该很简单,但我很难将其可视化。假设我有一个方法:
public Person person(string firstName, string lastName)
{
//code and such
string methodName = "Person person";
}
有没有一种方法可以创建一个变量并动态地将其设置为方法的名称?我需要这个,所以当我调用自定义异常方法时,我可以为日志记录设置有问题的方法的名称。如有任何帮助,我们将不胜感激。
您可以使用这个:
System.Reflection.MethodBase.GetCurrentMethod().Name;
如果你也想要类型,你可以使用:
var method = System.Reflection.MethodBase.GetCurrentMethod();
var methodName = string.Format("{0} {1}", method.DeclaringType.Name, method.Name);
编辑:现在我看到您正在编写日志记录函数,您可能想尝试MSDN文档中的类似内容:
public void DoProcessing()
{
TraceMessage("Something happened.");
}
public void TraceMessage(string message,
[CallerMemberName] string memberName = "",
[CallerFilePath] string sourceFilePath = "",
[CallerLineNumber] int sourceLineNumber = 0)
{
Trace.WriteLine("message: " + message);
Trace.WriteLine("member name: " + memberName);
Trace.WriteLine("source file path: " + sourceFilePath);
Trace.WriteLine("source line number: " + sourceLineNumber);
}
[CallerMemberName]
属性表示编译器应该传入调用函数。这使得它比使用反射更快。查看此链接以了解更多信息:http://msdn.microsoft.com/en-us/library/system.runtime.compilerservices.callermembernameattribute(v=vs.110).aspx
string methodName = System.Reflection.MethodBase.GetCurrentMethod().Name;
如果使用.NET 4.5,另一个解决方案是使用CallerMemberName
属性。
public class Example
{
public void Foo()
{
Bar();
}
private void Bar([CallerMemberName] string caller = null)
{
Console.WriteLine(caller); //Writes "Foo"
}
}
它不会给你所在函数的名称,而是给你打电话的函数的名称。我不知道这是否对您的异常处理程序有用,但它对实现INotifyPropertyChanged
非常有用
private string _exampleProperty;
public String ExampleProperty
{
get { return _exampleProperty; }
set
{
if (value == _exampleProperty) return;
_exampleProperty = value;
OnPropertyChanged();
}
}
public event PropertyChangedEventHandler PropertyChanged;
protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
{
var handler = PropertyChanged;
if (handler != null)
handler(this, new PropertyChangedEventArgs(propertyName));
}