162. DeclaringMethod property

בהמשך לטיפ של אתמול,

בType אנחנו יכול להיתקל במצב שמעבירים לנו ארגומנט גנרי של פונקציה.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
public static T[] Reverse<T>(T[] array)
{
T[] result =
new T[array.Length];
int currentIndex = array.Length - 1;
foreach (T current in array)
{
result[currentIndex--] = current;
}
return result;
}

אם נבצע את השורות הבאות

1
2
3
4
5
MethodInfo reverseMethod =
typeof (SuperMethods).GetMethod("Reverse");
Type parameterType =
reverseMethod.GetGenericArguments()[0]; // T

נקבל T.

מסתבר שאנחנו יכולים לחזור מהטיפוס הגנרי לפונקציה אליה הוא שייך:

1
2
3
4
5
6
MethodBase parameterMethod = parameterType.DeclaringMethod;
if (parameterMethod == reverseMethod)
{
// true
}

סופ"ש מוצהר טוב

שתף