Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
使 Linq Where 和 OrderBy 方法中使用的代表“可信赖”的最佳方法是什么?
例如,如果我的代码被传递了这些类型Func<T,Boolean>和Func<T>,那么检查这些将只对传递给它们的对象进行操作而不是例如访问文件系统等讨厌的事情的最佳选择是什么?
Func<T,Boolean>
Func<T>
我想一种方法是启动一个部分受信任的 AppDomain,并且代表在其中运行,但我想知道是否还有其他选择?
谢谢
一种选择是使用Expression<Func<...>>而不是Func<...>,然后您只需遍历树(从x => x.Foo等)并验证使用了哪些对象和方法 - 但您必须限制您的对象,因为显然甚至.Foo可能是恶意的。这里的优点是,对于调用者来说,它的外观和感觉与将委托作为 lambda 传递相同。
Expression<Func<...>>
Func<...>
x => x.Foo
.Foo
一种更简单的方法可能是让他们向您传递您用于排序/过滤/等的字符串(名称)或枚举。