我刚遇到涉及
Expressions的问题.
在我班上< T>有一个领域
Dictionary<Expression,ProjectedCollection> mCache;
其中Expression和ProjectedCollection都不能被指定为Expression< T,S>和ProjectedCollection< S>因为S在运行时会有不同的东西:
void AddSomething<S>(Expression<Func<T,S>> projection) { if (!mCache.ContainsKey(projection)) { var runnable = projection.Compile(); var allProjected = from elm in mList select runnable(elm); mCache.Add(projection,new ProjectedCollection<S>(allProjected)); } }
现在,在某些我不知道S的地方,我想迭代缓存中的所有内容并将表达式应用于新的东西.
foreach (keyvaluePair<Expression,ProjectedCollection> keyvaluePair in mCache) { // Want something like var func = keyvaluePair.Key.Compile(); keyvaluePair.Value.SignalAdd(func(newThing)); }
但是Compile()方法不适用于未打字的表达式.如果不知道S.也不可能进行铸造.
有人知道如何解决这个问题吗?
解决方法
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。