我正在构建一些Linq表达式,并试图获得IEnumerable.DefaultIfEmpty
的MethodInfo(http://msdn.microsoft.com/en-us/library/bb360179.aspx)。这似乎是一项简单的任务,但我不知道为什么它不起作用。
typeof(Enumerable).GetMethod("DefaultIfEmpty", new[] { typeof(IEnumerable<>) });
typeof(Enumerable).GetMethod("DefaultIfEmpty", new[] { typeof(IEnumerable<>).MakeGenericType(typeof(WorkitemListModel)) });
老实说,获得泛型方法是一件痛苦的事。我不知道有什么比使用更好的方法了
var method = typeof(Enumerable).GetMethods()
.Where(m => m.Name == "DefaultIfEmpty")
.Where(m => m.GetParameters().Length == 1)
.Single();
要调用GetMethod
,您必须具有完全正确的参数类型,包括该参数的正确泛型类型参数。一旦你有了一次,你就可以做到,但在那之前,我认为以上就是所有可用的:(