Iya tentu saja.
Jika Anda ingin memanipulasi objek, saya sebenarnya menggunakan fungsi seperti ini:
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;
}
Garis ini:
MethodBase method = new StackFrame(2).GetMethod();
Menaiki bingkai tumpukan untuk menemukan metode pemanggilan kemudian kami menggunakan refleksi untuk mendapatkan nilai informasi parameter yang diteruskan ke sana untuk fungsi pelaporan kesalahan umum. Untuk mendapatkan metode saat ini, cukup gunakan bingkai tumpukan saat ini (1).
Seperti yang orang lain katakan untuk nama metode saat ini, Anda juga dapat menggunakan:
MethodBase.GetCurrentMethod()
Saya lebih suka berjalan stack karena jika melihat secara internal pada metode itu hanya menciptakan StackCrawlMark. Mengatasi Stack secara langsung tampak lebih jelas bagi saya
Posting 4.5 Anda sekarang dapat menggunakan [CallerMemberNameAttribute] sebagai bagian dari parameter metode untuk mendapatkan string dari nama metode - ini dapat membantu dalam beberapa skenario (tetapi benar-benar mengatakan contoh di atas)
public void Foo ([CallerMemberName] string methodName = null)
Ini tampaknya terutama solusi untuk dukungan INotifyPropertyChanged di mana sebelumnya Anda memiliki string yang berserakan di seluruh kode acara Anda.