Я недавно начал использовать дизайн по контракту с моим проектом.У меня есть несколько вопросов относительно того, как гарантировать метод и функцию.
public static void SaveAttachment(Outlook.MailItem _mailItem, string saveTo)
{
Contract.Requires<ArgumentNullException>(_mailItem != null);
Contract.Requires(_mailItem.Attachments.Count > 0);
Contract.Requires(!String.IsNullOrEmpty(saveTo));
string attachLink = "<file://{0}>";
StringBuilder sBuilder = new StringBuilder();
try
{
foreach (string fp in saveAllEmailAttachmentsThenReturnSavedFilePathList(emailAttachmentList(_mailItem), saveTo))
{
sBuilder.Append(String.Format("Attachment saved: " + attachLink, fp) + Environment.NewLine);
}
_mailItem.Body = sBuilder.ToString() + _mailItem.Body;
_mailItem.Save();
}
catch (Exception ex)
{
LogErrorMessage(ex);
}
}
Как вы можете видеть, вышеописанный метод сохранит вложение электронной почты и убедится, что передаваемый почтовый элемент не является нулевым и имеет вложение,Тем не менее, как я могу гарантировать, что этот метод будет делать то, что он должен делать.
Вкл. Функция:
public static List<Outlook.MailItem> SelectedMail(Outlook.Selection selectedItems)
{
Contract.Requires(selectedItems.Count > 0);
Contract.Ensures(Contract.Result<List<Outlook.MailItem>>().Count > 0);
List<Outlook.MailItem> selectedMails = new List<Outlook.MailItem>();
foreach (object obj in selectedItems)
{
if (obj is Outlook.MailItem)
{
selectedMails.Add((Outlook.MailItem)obj);
}
}
Contract.Assume(selectedMails.Count > 0);
return selectedMails;
}
Что если у выбранных элементов нет почтового элемента?если я напишу договор, это будет гарантировать, что это вызовет ошибку на выбранном электронном письме, к которому нет прикрепленных файлов.
Извините, я новичок в этой парадигме.Я хочу научиться этому, поэтому мне не нужно писать безопасный защитный код с помощью if-else.