There are actually, at least, 16 Outlook item types. Documentation itemizing the different types is a bit hard to find, but one reference is here.
So, for example, if you wanted to move all the items from one folder to another, you could do something like:
Items items = source.Items;
foreach (object item in items)
{
switch (item)
{
case AppointmentItem appointmentItem:
appointmentItem.Move(destination);
break;
case ContactItem contactItem:
contactItem.Move(destination);
break;
case DistListItem distListItem:
distListItem.Move(destination);
break;
case DocumentItem documentItem:
documentItem.Move(destination);
break;
case JournalItem journalItem:
journalItem.Move(destination);
break;
case MailItem mailItem:
mailItem.Move(destination);
break;
case MeetingItem meetingItem:
meetingItem.Move(destination);
break;
case NoteItem noteItem:
noteItem.Move(destination);
break;
case PostItem postItem:
postItem.Move(destination);
break;
case RemoteItem remoteItem:
remoteItem.Move(destination);
break;
case ReportItem reportItem:
reportItem.Move(destination);
break;
case TaskItem taskItem:
taskItem.Move(destination);
break;
case TaskRequestAcceptItem taskRequestAcceptItem:
taskRequestAcceptItem.Move(destination);
break;
case TaskRequestDeclineItem taskRequestDeclineItem:
taskRequestDeclineItem.Move(destination);
break;
case TaskRequestItem taskRequestItem:
taskRequestItem.Move(destination);
break;
case TaskRequestUpdateItem taskRequestUpdateItem:
taskRequestUpdateItem.Move(destination);
break;
}
Marshal.ReleaseComObject(item);
}
The type matching in the case statements requires C# 7 or higher.