调用保存在字符串变量中的实例方法

Invoke instance method which is held in a string variable

我正在尝试使用 Interop.Outlook 在 Outlook 中指定文件夹。

因此,为了做到这一点,我使用了以下方法:

Outlook.Folder targetFolder = ParentFolder.Folders["Level-1 Folder"] as Outlook.Folder;

这通常可以正常工作,但有时我将不得不转到比子文件夹更低的位置。我可能需要像这样进入子文件夹:

Outlook.Folder targetFolder = ParentFolder.Folders["Level-1 Folder"].Folders["Level-2 Folder"] as Outlook.Folder;

我想知道是否可以从变量使用 Folder 方法。请看一下我的想象:

string myMethod = "Folders["Level-1 Folder"].Folders["Level-2 Folder"]";
Outlook.Folder targetFolder = ParentFolder. + myMethod;

感谢您的回答。

此致, W

我想知道是否可以从变量使用 Folder 方法。 嗯,这就是你在 ParentFolder.Folders["Level-1 Folder"] 中所做的。 ParentFolder 是一个变量。

随便写

Outlook.Folder subfolder = targetFolder.Folders["Level-2 Folder"] as Outlook.Folder;

我不确定您为什么认为方法名称必须作为字符串传递。顺便提一句。 Folders 是一个索引器。

是否链接索引没有区别

var x = a.f["a"].f["b"].f["c"];

相同
var x = a.f["a"];
x = x.f["b"];
x = x.f["c"];

层层变化的是文件夹名称(索引),可以在变量中。你可以写

string index;
var targetFolder = ParentFolder as Outlook.Folder;

index = "Level-1 Folder";
targetFolder = targetFolder.Folders[index] as Outlook.Folder;
index = "Level-2 Folder";
targetFolder = targetFolder.Folders[index] as Outlook.Folder;
index = "Level-3 Folder";
targetFolder = targetFolder.Folders[index] as Outlook.Folder;

所以你在每个级别都有完全相同的语句,只是文件夹名称发生了变化。或者:

var indexes = new string[] { "Level-1 Folder", "Level-2 Folder", "Level-3 Folder" };
var targetFolder = ParentFolder as Outlook.Folder;

foreach (string index in indexes) {
    targetFolder = targetFolder.Folders[index] as Outlook.Folder;
}