代码之家  ›  专栏  ›  技术社区  ›  Gaurav Thantry

无法隐式转换类型'Microsoft.Office.Interop.Outlook.MAPIFolder文件夹'收件人'Microsoft.Office.Interop.Outlook文件夹'

  •  0
  • Gaurav Thantry  · 技术社区  · 6 年前

    我是新来的。我能够用C语言编写代码,因为我是java程序员,而且C语言也是面向对象的。请记住,我在这里解释的一些术语可能是java的。

    如何使用C#中的folder方法在子文件夹之间迭代?我已经初始化了 subFolders 方法的对象 folders 全班同学 Outlook 存储所有子文件夹(如果有)。我用的是 for subFolder 目标 folder 方法中保存当前迭代文件夹 子文件夹

    子文件夹 对象。

    错误消息: 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 回复  |  直到 6 年前
        1
  •  1
  •   BugFinder    6 年前

    我使用了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
                    }
                }
            }
        }
    }
    
        2
  •  0
  •   Gaurav Thantry    6 年前

    我找到解决办法了。我所要做的就是将子文件夹类型转换为 Outlook.Folder

     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.
                }
            }