Атрибуты параметра C # RegEx - PullRequest
0 голосов
/ 12 декабря 2010

Я только что прочитал «Прагматичный программист» и главу «Проектирование по контракту».Мне пришло в голову, что когда мы создаем функцию, возможно, в общей библиотеке, было бы полезно указать атрибуты параметров.

Мне интересно, сталкивался ли кто-нибудь с такой идеей, я не верюон существует в C #, как я думаю, что-то вроде этого;

public String SendEmail(String ToAddress [RegExMatch(@"\b[A-Z0-9._%-]+@[A-Z0-9.-]+\.[A-Z]{2,4}\b")], FromAddress, Body)

Для удобства чтения было бы более разумно поместить его выше объявления функции, я думаю.

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

Больше обсуждения, чем поиск ответа.

Приветствия, Майк

Ответы [ 2 ]

2 голосов
/ 12 декабря 2010

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

0 голосов
/ 13 декабря 2010

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

C # /. NET имеет официальный System.Diagnostics.Contracts Кодовые контракты . Spec # - это язык, производный от C #, в который добавлен DbC.Я предполагаю , что большая часть контрактов на код .NET 4 вышла из Spec #, поэтому я не уверен, насколько больше Spec # предлагает к этому моменту.

Я не DbCпарень - но подумал, что может быть полезно сообщить вам;да, люди делают это, и да, то, что вы предлагаете, безусловно, выполнимо и разумно (хотя адреса электронной почты общеизвестно сложно проверить с помощью регулярных выражений - так что вы можете захотеть другой пример).

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