繁体   English   中英

Queryable类的C#GetMethod信息

[英]C# GetMethod info of Queryable class

我是Reflection的新手,我在尝试以下代码

var queryableLastMethodInfo = typeof(Queryable).GetMethod("Last", new Type[]{ typeof(IQueryable<>) });

但是queryableLastMethodInfo始终返回null

能否请你帮忙?

这应该为您提供不带谓词的“ 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方法,并仅使用一个参数选择一个方法:

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

此问答中描述了一般情况。

如果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()));

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM