Сделайте делегатов .NET (для фильтрации и упорядочения) «надежными» - PullRequest
3 голосов
/ 26 февраля 2011

Что было бы лучшим способом сделать делегатов, используемых в методах Linq Where и OrderBy, «доверяемыми»?

Например, если бы моему коду передавались эти типы Func<T,Boolean> и Func<T>, что быбыть лучшим вариантом, чтобы проверить, что они будут работать только на объект, переданный им, а не, например, делать такие неприятные вещи, как доступ к файловой системе и т. д.

Я полагаю, один из способов будет иметь запускчастично доверенный AppDomain, и в нем работают делегаты, но мне интересно, есть ли другой вариант?

Спасибо

1 Ответ

1 голос
/ 26 февраля 2011

Один вариант будет использовать Expression<Func<...>> вместо Func<...>, тогда вы просто пройдитесь по дереву (от x => x.Foo и т. Д.) И подтвердите, какие объекты и методы используются - но вам придется ограничить вашим объектов, поскольку, очевидно, даже .Foo может быть злокачественным. Преимущество здесь в том, что для вызывающей стороны это выглядит и ощущается так же, как передача делегата в виде лямбды.

Для них может быть проще передать вам строку (имя) или перечисление, которое вы используете для сортировки / фильтра / и т. Д.

...