见:Get();有注释一行的和没注释一行的,下面调试分别展示了结论。注释通过,非注释不能通过。
public abstract class CollectionApiController<T>:ApiController where T:class , new() { public IEnumerable<T> Collection { get; protected set; } //public dynamic Get() { return (Collection).Filter(((HttpContextBase)Request.Properties["MS_HttpContext"]).Request.QueryString); } public dynamic Get() { return DoGetWith(Collection).Filter(((HttpContextBase)Request.Properties["MS_HttpContext"]).Request.QueryString); } protected virtual IEnumerable<dynamic> DoGetWith(IEnumerable<T> selfCollection) { return selfCollection; } }
如果不进行辅助转换,正常;
转换则异常;
类型关系正常,且验证是正常的,如下图:
Filter 是一些表达式,函数接口声明如下;
核心过程:
除了可能是表达式存在什么什么限制,暂无思路,请知悉者不吝告知。
异常是啥被你截断了,看不见。
return 那儿是啥代码,也看不见。
这不好说啊。
附上这行代码了。代码很简单就几行。
异常就是不能生成表达式树,是自定义的,不是微软类库的。
System.InvalidOperationException:“Could not create expression from: LocationStart”