【问题标题】:C# Access Data in VSTO AddinC# 访问 VSTO 插件中的数据
【发布时间】:2015-04-29 23:23:00
【问题描述】:

我正在创建一个 VSTO 插件。我想在 Outlook 启动时创建一个字典,然后我可以从 OutlookRibbon 类中的方法访问它。创建这样一个字典的最佳实践或正确方法是什么?我目前有在使用它的方法中创建字典的方法,这是非常低效的,因为它每次都被调用。代码如下:

public partial class OutlookRibbon
{
    private void OutlookRibbon_Load(object sender, RibbonUIEventArgs e)
    {
        genMyDict();
    }

    private void button1_Click(object sender, RibbonControlEventArgs e)
    {
        Archive();
    }
    void genMyDict()
    {
        Dictionary<string, string> myDict= new Dictionary<string, string>();
        myDict.Add("@x.com", "x");
        // many lines of this

    }

    void Archive()
    {
        if (myDict.ContainsKey("@x.com")) { // run code }
    }

显然这会引发错误 myDict 在 Archive() 的当前上下文中不存在

我应该如何构造它,以便字典只创建一次,但仍然可以从 OutlookRibbon 类中的其他方法访问?我似乎无法让它工作。有没有更好的方法来创建像这样在 VSTO Outlook 插件中使用的字典?

【问题讨论】:

标签: c# vsto outlook-addin


【解决方案1】:

myDict 在当前上下文中不存在

通过将字典设为OutlookRibbon 类的属性来更改字典的范围。这将扩大其范围,远离方法genMyDict本地化堆栈

public Dictionary<string, string> MyDictionary { get; set; }

void genMyDict()
{
    MyDictionary = new Dictionary<string, string>();
    MyDictionary.Add("@x.com", "x");
    ...
}

void Archive()
{
    if (MyDictionary.ContainsKey("@x.com")) { // run code }
}

这将允许一切访问它。因为范围的改变允许从一个方法访问整个类。

【讨论】:

  • 我无法找到构造函数,因为我认为它已生成,我不想意外覆盖它。
  • @shenk 抱歉,我把私有方法 genMyDict 误认为是构造函数。因此,不要像我说的那样在构造函数中分配字典,忘记这一点,将分配保留在 genMyDict 中,但将其分配给您在类 OutlookRibbon 上为它创建的属性。
  • 你能举个小例子吗?
  • @Shenk 它发生在哪里?
  • 在 ContainsKey 方法上,对象引用未设置为对象的实例
猜你喜欢
  • 1970-01-01
  • 2021-06-13
  • 1970-01-01
  • 1970-01-01
  • 2010-12-10
  • 1970-01-01
  • 1970-01-01
  • 2011-10-28
  • 2018-01-31
相关资源
最近更新 更多