获取Enumerable.DefaultIfEmpty的methodinfo

时间:2011-06-17 09:47:42

标签: c# reflection methodinfo

我正在构建一些Linq Expression并试图抓住IEnumerable.DefaultIfEmptyhttp://msdn.microsoft.com/en-us/library/bb360179.aspx)的MethodInfo。什么似乎是一件容易的事,但我对它无法正常工作毫无头绪。

typeof(Enumerable).GetMethod("DefaultIfEmpty", new[] { typeof(IEnumerable<>) });

typeof(Enumerable).GetMethod("DefaultIfEmpty", new[] { typeof(IEnumerable<>).MakeGenericType(typeof(WorkitemListModel)) });

1 个答案:

答案 0 :(得分:5)

说实话,获取通用方法很痛苦。我不知道比使用更好的方法:

var method = typeof(Enumerable).GetMethods()
                               .Where(m => m.Name == "DefaultIfEmpty")
                               .Where(m => m.GetParameters().Length == 1)
                               .Single();

要调用GetMethod,您必须拥有完全正确的参数类型,包括参数的正确通用类型参数。一旦你有一次你可以做到,但在那之前我认为以上就是可用的:(