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

◆ ArgsMatch()

static bool System.Linq.EnumerableRewriter.ArgsMatch ( MethodInfo m,
ReadOnlyCollection< Expression > args,
Type[] typeArgs )
inlinestaticprivate

Definition at line 292 of file EnumerableRewriter.cs.

293 {
294 ParameterInfo[] array = m.GetParameters();
295 if (array.Length != args.Count)
296 {
297 return false;
298 }
299 if (!m.IsGenericMethod && typeArgs != null && typeArgs.Length != 0)
300 {
301 return false;
302 }
303 if (!m.IsGenericMethodDefinition && m.IsGenericMethod && m.ContainsGenericParameters)
304 {
305 m = m.GetGenericMethodDefinition();
306 }
307 if (m.IsGenericMethodDefinition)
308 {
309 if (typeArgs == null || typeArgs.Length == 0)
310 {
311 return false;
312 }
313 if (m.GetGenericArguments().Length != typeArgs.Length)
314 {
315 return false;
316 }
318 }
319 int i = 0;
320 for (int count = args.Count; i < count; i++)
321 {
322 Type type = array[i].ParameterType;
323 if (type == null)
324 {
325 return false;
326 }
327 if (type.IsByRef)
328 {
329 type = type.GetElementType();
330 }
332 if (!type.IsAssignableFrom(expression.Type))
333 {
334 if (expression.NodeType == ExpressionType.Quote)
335 {
337 }
338 if (!type.IsAssignableFrom(expression.Type) && !type.IsAssignableFrom(StripExpression(expression.Type)))
339 {
340 return false;
341 }
342 }
343 }
344 return true;
345 [UnconditionalSuppressMessage("ReflectionAnalysis", "IL2060:MakeGenericMethod", Justification = "MakeGenericMethod is only called to get the parameter types, which are only used to make a 'match' decision. The generic method is not invoked.")]
347 {
348 return method.MakeGenericMethod(genericTypes).GetParameters();
349 }
350 }
static Type StripExpression(Type type)

References System.array, System.Linq.count, System.Collections.Generic.Dictionary< TKey, TValue >.Count, System.Type.GetElementType(), System.Linq.EnumerableRewriter.StripExpression(), and System.type.

Referenced by System.Linq.EnumerableRewriter.FindEnumerableMethodForQueryable(), System.Linq.EnumerableRewriter.FindMethod(), and System.Linq.EnumerableRewriter.VisitMethodCall().