Передача метода в другой метод - PullRequest
2 голосов
/ 12 апреля 2009

Возможно ли как-то отправить функцию в другую функцию для ее запуска. Например ... Я хочу иметь атрибут в поле, в котором я могу указать метод, который будет отправлен другому методу, в который будет передан метод.

Не уверен, имеет ли это смысл, но вот небольшой пример.

[ValidateIf(x=>x.test())]
public string test { get; set; }

Обновление: В основном я хочу использовать DataAnnotations для проверки, но иногда в зависимости от настроек системы поле может быть не обязательным ... У вас есть какие-либо предложения относительно направления, в котором я должен идти?

Ответы [ 3 ]

3 голосов
/ 12 апреля 2009

К сожалению, вы не можете использовать делегатов в качестве свойств для атрибутов. Вам нужно будет указать имя метода, а затем создать делегат, используя отражение во время выполнения, что, очевидно, не идеально с точки зрения поиска опечаток во время компиляции.

Возможно, возможно в IL (указав MethodInfo с использованием эквивалента typeof), но C # не предоставляет никаких способов сделать это :( Возможно, однажды мы получим infoof оператор ... вполне то, как он будет выставлен, я не уверен. (Было бы хорошо сохранить информацию о типе делегата в атрибуте.)

0 голосов
/ 12 апреля 2009

Если вы хотите добавить проверку к вашим объектам домена, вы можете взглянуть на NHibernate Validator.

http://nhibernate.info/doc/validator/nhibernate-validator-1-0-0-documentation.html

0 голосов
/ 12 апреля 2009

Я не знаю, будет ли это соответствовать вашей конкретной цели, но в целом, если вы хотите добавить аннотации данных на свой язык, я рекомендую вам взглянуть на Spec #. Это расширение языка C #, которое позволяет вам добавлять контракты данных в вашу программу и, по-видимому, для достижения цели, которую вы ищете.

http://research.microsoft.com/en-us/projects/specsharp/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...