Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches

◆ GetCSharpThunk()

static MethodInfo System.Dynamic.Utils.DelegateHelpers.GetCSharpThunk ( Type returnType,
bool hasReturnValue,
ParameterInfo[] parameters )
inlinestaticprivate

Definition at line 86 of file DelegateHelpers.cs.

87 {
88 try
89 {
90 if (parameters.Length > 2)
91 {
92 return null;
93 }
94 if (returnType.IsByRefLike || returnType.IsByRef || returnType.IsPointer)
95 {
96 return null;
97 }
98 foreach (ParameterInfo parameterInfo in parameters)
99 {
100 Type parameterType = parameterInfo.ParameterType;
101 if (parameterType.IsByRefLike || parameterType.IsByRef || parameterType.IsPointer)
102 {
103 return null;
104 }
105 }
106 int num = parameters.Length;
107 if (hasReturnValue)
108 {
109 num++;
110 }
111 Type[] array = ((num == 0) ? Type.EmptyTypes : new Type[num]);
112 for (int j = 0; j < parameters.Length; j++)
113 {
114 array[j] = parameters[j].ParameterType;
115 }
116 MethodInfo methodInfo;
117 if (hasReturnValue)
118 {
119 array[^1] = returnType;
120 methodInfo = s_FuncThunks[parameters.Length];
121 }
122 else
123 {
124 methodInfo = s_ActionThunks[parameters.Length];
125 }
126 return (array.Length != 0) ? methodInfo.MakeGenericMethod(array) : methodInfo;
127 }
128 catch
129 {
130 return null;
131 }
132 }
static readonly MethodInfo[] s_ActionThunks
static readonly MethodInfo[] s_FuncThunks
virtual MethodInfo MakeGenericMethod(params Type[] typeArguments)
Definition MethodInfo.cs:41

References System.array, System.Type.EmptyTypes, System.Type.IsByRef, System.Type.IsByRefLike, System.Type.IsPointer, System.Reflection.MethodInfo.MakeGenericMethod(), System.Reflection.ParameterInfo.ParameterType, System.Dynamic.Utils.DelegateHelpers.s_ActionThunks, and System.Dynamic.Utils.DelegateHelpers.s_FuncThunks.

Referenced by System.Dynamic.Utils.DelegateHelpers.CreateObjectArrayDelegateRefEmit().