Не удалось неявно преобразовать тип «Microsoft.Office.Interop.Outlook.MAPIFolder» в «Microsoft.Office.Interop.Outlook.Folder» - PullRequest
0 голосов
/ 11 февраля 2019

Я новичок в C #.Я могу писать на C #, потому что я программист на Java, а C # также является объектно-ориентированным.Пожалуйста, имейте в виду, что некоторые из терминов, которые я здесь использую для объяснения, могут относиться к java.

Как перебирать подпапки, используя метод папок в C #?Я инициализировал объект subFolders метода folders класса Outlook для хранения всех подпапок, если они есть.И я использую цикл for для итерации среди них.В цикле я пытаюсь инициализировать объект subFolder метода folder для хранения текущей папки итерации из объекта subFolders.

Я получаю ошибку преобразования при попытке назначитьтекущая итеративная папка для объекта subFolder.

Сообщение об ошибке: Cannot implicitly convert type 'Microsoft.Office.Interop.Outlook.MAPIFolder' to 'Microsoft.Office.Interop.Outlook.Folder'. An Implicit conversion exists (are you missing a cast?)

Ниже приведена часть кода:

 static void enumerateFolders(Outlook.Folder folder)  //Checks if there are sub folders inside the Inbox folder.
        {
            Outlook.Folders subfolders = folder.Folders;
            if (subfolders.Count > 0)
            {
                for (int i = 0; i < subfolders.Count; i++)
                {
                    Outlook.Folder subFolder = subfolders[i];  //This is where I am getting the error.
                    iterateMessages(subFolder);
                }
            }
            else
            {
                iterateMessages(folder); 
            }
        }

Ответы [ 2 ]

0 голосов
/ 12 февраля 2019

Я получил решение.Все, что мне нужно было сделать - это подпапки typeCast [i] to Outlook.Folder type.Ниже приведен код:

 static void enumerateFolders(Outlook.Folder folder)  //Checks if there are sub folders inside the Inbox folder.
        {
            Outlook.Folders subfolders = folder.Folders;
            if (subfolders.Count > 0)
            {
                for (int i = 0; i < subfolders.Count; i++)
                {
                    Outlook.Folder subFolder = (Outlook.Folder) subfolders[i];  //Solution: type casted
                    iterateMessages(subFolder);
                }
            }
            else
            {
                iterateMessages(folder);     //This implements the core functionality of the program. It iterates amongst the emails to retrieve the clearstream attachment.
            }
        }
0 голосов
/ 11 февраля 2019

Я использовал mapifolders, и этот код работал для многих версий outlook (использовал его для построения путей типа \\ pst \ folder \ folder2, к которым мы привыкли)

public struct Flder
{
    public String name;
    public MAPIFolder folder;
}

...

private static void WalkTree(Folders topfolder, String path)
{
    if (topfolder.Count > 0)
    {
        foreach (MAPIFolder f in topfolder.AsParallel())
        {
            if (!f.Name.Contains("Public"))
            {
                Flder fld = new Flder();
                fld.name = path + "\\" + f.Name;
                fld.folder = f;
                folderList.Add(fld);
                try
                {
                    WalkTree(f.Folders, path + "\\" + f.Name);
                }
                catch
                {
                    continue; // skip any errors
                }
            }
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...