الحصول على توقيع MethodInfo
-
11-12-2019 - |
سؤال
لنفترض أن لديك MethodInfo المتعلقة بالطريقة myMethod:
void myMethod(int param1, int param2) { }
وتريد إنشاء سلسلة تمثل توقيع الطريقة:
string myString = "myMethod (int, int)";
من خلال التكرار عبر معلمات MethodInfo، تمكنت من تحقيق هذه النتائج عن طريق استدعاء أساليب ToString الخاصة بأنواع المعلمات:
"myMethod (System.Int32, System.Int32)"
كيف يمكنني تحسين ذلك وتحقيق النتائج الموضحة أعلاه؟
المحلول
تم طرح هذا السؤال من قبل، ويمكن القيام به من خلال API Codedom.انظر هذا و هذا .لاحظ أن هذه الكلمات الرئيسية (INT، BOOL، إلخ.) هي لغة محددة، لذلك إذا كنت تنتج هذا من أجل مستهلك عام عام، فإن أسماء أنواع الإطارات مفضلة عادة.
نصائح أخرى
بقدر ما أعرف، لا يوجد شيء مدمج يمكنه تحويل ملف حقيقي اكتب اسم بدائية (System.Int32
) إلى الاسم المستعار المضمن (int
).نظرًا لوجود عدد قليل جدًا من هذه الأسماء المستعارة، فليس من الصعب جدًا كتابة طريقتك الخاصة:
public static string GetTypeName(Type type)
{
if (type == typeof(int)) // Or "type == typeof(System.Int32)" -- same either way
return "int";
else if (type == typeof(long))
return "long";
...
else
return type.Name; // Or "type.FullName" -- not sure if you want the namespace
}
ومع ذلك، إذا كان المستخدم فعلا فعل اكتب في System.Int32
بدلا من int
(وهذا بالطبع سيكون قانونيًا تمامًا) ستظل هذه التقنية تطبع "int".ليس هناك الكثير الذي يمكنك القيام به حيال ذلك لأن System.Type
هو نفسه في كلتا الحالتين - لذلك لا توجد طريقة لمعرفة المتغير الذي كتبه المستخدم بالفعل.