在Linq Where和OrderBy方法中使用代理的最佳方法是什么?'/ / p>
例如,如果我的代码传递了这些类型Func<T,Boolean>
和Func<T>
,那么检查这些类型只会对传递给它们的对象进行操作的最佳选择是什么,而不是例如,做一些讨厌的事情,如访问文件系统等?
我想有一种方法是启动时有一个部分受信任的AppDomain,并且代理运行在那里,但我想知道是否还有其他选项?
由于
答案 0 :(得分:1)
一个选项是使用Expression<Func<...>>
而不是Func<...>
,然后您只需走树(从x => x.Foo
等)并验证使用了哪些对象和方法 - 但您必须限制你的对象,显然即使.Foo
也可能是恶意的。这里的优点是到调用者它的外观和感觉与将委托作为lambda传递一样。
一种更简单的方法是让他们传递一个字符串(名称)或用于排序/过滤器/等的枚举。