হ্যাঁ অবশ্যই।
আপনি যদি কোনও জিনিস হেরফের করতে চান তবে আমি আসলে এই জাতীয় ক্রিয়াটি ব্যবহার করি:
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()
আমি স্ট্যাকটি হাঁটা পছন্দ করি কারণ যদি সেই পদ্ধতিতে অভ্যন্তরীণভাবে তাকান তবে এটি যেভাবেই স্ট্যাকক্রোলমার্ক তৈরি করে। স্ট্যাককে সম্বোধন করা আমার কাছে পরিষ্কার মনে হয় seems
৪.৫ পোস্ট করুন আপনি এখন পদ্ধতির নামের একটি স্ট্রিং পেতে পদ্ধতির পরামিতিগুলির অংশ হিসাবে [CallerMemberNameAttribute] ব্যবহার করতে পারেন - এটি কিছু পরিস্থিতিতে সহায়তা করতে পারে (তবে সত্যিই উপরে বর্ণিত উদাহরণটি বলে)
public void Foo ([CallerMemberName] string methodName = null)
এটি প্রধানত INotifyPropertyChanged সমর্থনের সমাধান বলে মনে হয়েছিল যেখানে এর আগে আপনি আপনার ইভেন্ট কোডের মাধ্যমে স্ট্রিংগুলি ছড়িয়ে দিয়েছিলেন।