C#获取可查询类的方法信息

C#获取可查询类的方法信息,c#,reflection,types,typeof,getmethod,C#,Reflection,Types,Typeof,Getmethod,我是反射新手,我正在尝试下面的代码 var queryableLastMethodInfo = typeof(Queryable).GetMethod("Last", new Type[]{ typeof(IQueryable<>) }); var queryableLastMethodInfo=typeof(Queryable).GetMethod(“Last”,新类型[]{typeof(IQueryable)}); 但是queryableLastMethodInfo总是返回n

我是反射新手,我正在尝试下面的代码

var queryableLastMethodInfo = typeof(Queryable).GetMethod("Last", new Type[]{ typeof(IQueryable<>) });
var queryableLastMethodInfo=typeof(Queryable).GetMethod(“Last”,新类型[]{typeof(IQueryable)});
但是queryableLastMethodInfo总是返回null

您能帮忙吗?

您可以找到最后所有的方法,并选择只有一个参数的方法:

var method = typeof (Queryable).GetMethods()
                               .Where(m => m.Name == "Last")
                               .First(m => m.GetParameters().Length == 1);
一般情况如中所述

您可以找到最后所有的方法,并选择只有一个参数的方法:

var method = typeof (Queryable).GetMethods()
                               .Where(m => m.Name == "Last")
                               .First(m => m.GetParameters().Length == 1);

一般情况如中所述

这将为您提供不带谓词的“Last”扩展方法的MethodInfo:

var queryableLastMethodInfo = typeof(Queryable).GetMethods(BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic)
    .FirstOrDefault(x => x.Name == "Last" && x.GetParameters().Count() == 1);
…这应该给你另一个:

var queryableLastMethodInfo = typeof(Queryable).GetMethods(BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic)
    .FirstOrDefault(x => x.Name == "Last" && x.GetParameters().Count() == 2);

这将为您提供不接受谓词的“Last”扩展方法的MethodInfo:

var queryableLastMethodInfo = typeof(Queryable).GetMethods(BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic)
    .FirstOrDefault(x => x.Name == "Last" && x.GetParameters().Count() == 1);
…这应该给你另一个:

var queryableLastMethodInfo = typeof(Queryable).GetMethods(BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic)
    .FirstOrDefault(x => x.Name == "Last" && x.GetParameters().Count() == 2);

如果Queryable接收名为“Last”的新方法并仅使用一个参数,则“不承担风险”代码失败

准确永远不会太多

var queryableLastMethodInfo = typeof(Queryable).GetMethods().Single(_Method => _Method.Name == "Last" && _Method.IsGenericMethod && _Method.GetGenericArguments().Length == 1 && _Method.GetParameters().Length == 1   && _Method.GetParameters().Single().ParameterType == typeof(IQueryable<>).MakeGenericType(_Method.GetGenericArguments().Single()));
var queryableLastMethodInfo=typeof(Queryable).GetMethods().Single(\u Method=>\u Method.Name==“Last”&&&u Method.IsGenericMethod&&u Method.GetGenericArguments().Length==1&&u Method.GetParameters().Single().ParameterType==typeof(IQueryable).MakeGenericType(\u Method.GetGenericArguments().Single());

如果可查询的接收名为“Last”的新方法并且只接受一个参数,则不要冒险代码失败

准确永远不会太多

var queryableLastMethodInfo = typeof(Queryable).GetMethods().Single(_Method => _Method.Name == "Last" && _Method.IsGenericMethod && _Method.GetGenericArguments().Length == 1 && _Method.GetParameters().Length == 1   && _Method.GetParameters().Single().ParameterType == typeof(IQueryable<>).MakeGenericType(_Method.GetGenericArguments().Single()));
var queryableLastMethodInfo=typeof(Queryable).GetMethods().Single(\u Method=>\u Method.Name==“Last”&&&u Method.IsGenericMethod&&u Method.GetGenericArguments().Length==1&&u Method.GetParameters().Single().ParameterType==typeof(IQueryable).MakeGenericType(\u Method.GetGenericArguments().Single());

@RafaelDiaz:嗯?方法没有名称空间。我确实想知道这段特定代码的具体计划是什么…@RafaelDiaz:嗯?方法没有名称空间。我确实想知道这段代码的具体计划是什么。。。