Ответ 1
Вы можете манипулировать строкой разделенных запятыми категорий любым способом, который вы выберете. Чтобы вставить категорию, я обычно проверяю, является ли текущая строка нулевой, а затем просто назначьте ее. Если категория не равна нулю, я добавляю ее, если она еще не существует. Чтобы удалить элемент, я просто заменю имя категории пустой строкой.
Добавление категории
var customCat = "Custom Category";
if (mailItem.Categories == null) // no current categories assigned
mailItem.Categories = customCat;
else if (!mailItem.Categories.Contains(customCat)) // insert as first assigned category
mailItem.Categories = string.Format("{0}, {1}", customCat, mailItem.Categories);
Удаление категории
var customCat = "Custom Category";
if (mailItem.Categories.Contains(customCat))
mailItem.Categories = mailItem.Categories.Replace(string.Format("{0}, ", customCat), "").Replace(string.Format("{0}", customCat), "");
Существует множество способов манипулирования строками - они просто решили упростить структуру сериализованных данных.
Я пытаюсь создать свои собственные категории во время запуска надстройки, чтобы убедиться, что они существуют. Конечно, переименование категории является проблемой, но если вы гарантируете, что ваши категории существуют каждый раз при загрузке надстройки, вы можете хотя бы обеспечить некоторый уровень достоверности.
Чтобы управлять категориями Outlook, вы можете использовать ThisAddIn.Application.Session.Categories.
var customCat = "Custom Category";
if (Application.Session.Categories[customCat] == null)
Application.Session.Categories.Add(customCat, Outlook.OlCategoryColor.olCategoryColorDarkRed);