Вы можете манипулировать строкой разделенных запятыми категорий любым способом. Чтобы вставить категорию, я обычно проверяю, является ли текущая строка нулевой, а затем просто назначаю ее. Если категория не равна нулю, я добавляю ее, если она еще не существует. Чтобы удалить элемент, я просто заменяю название категории пустой строкой.
Добавление категории
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), "");
Существует множество способов манипулирования строками - они просто решили сохранить сериализованную структуру данных простой под ней.
Я склонен создавать свои собственные категории во время запуска надстройки, чтобы убедиться, что они существуют. Конечно, переименование категорий является проблемой, но если вы гарантируете, что ваши категории существуют каждый раз, когда загружается ваша надстройка, вы можете по крайней мере обеспечить некоторый уровень достоверности.
var customCat = "Custom Category";
if (Application.Session.Categories[customCat] == null)
Application.Session.Categories.Add(customCat, Outlook.OlCategoryColor.olCategoryColorDarkRed);