我正在构建一些Linq Expression并试图抓住IEnumerable.DefaultIfEmpty
(http://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)) });
答案 0 :(得分:5)
说实话,获取通用方法很痛苦。我不知道比使用更好的方法:
var method = typeof(Enumerable).GetMethods()
.Where(m => m.Name == "DefaultIfEmpty")
.Where(m => m.GetParameters().Length == 1)
.Single();
要调用GetMethod
,您必须拥有完全正确的参数类型,包括参数的正确通用类型参数。一旦你有一次你可以做到,但在那之前我认为以上就是可用的:(