将before事件添加到IDictionary或类

时间:2017-04-01 10:45:37

标签: c# winforms .net-4.0 idictionary

是否可以在将项目添加或更新为IDictionary之前创建事件?

public static IDictionary<string, Aircraft> aircraftList = new Dictionary<string, Aircraft>();

我就像这样使用它

MainForm.aircraftList[acNumber].FlightStatus = strFlying;

我想要做的是,如果新值为null,空字符串或int == 0

,则不更新该值

飞机是一个有很多价值观的类,它们是字符串组合和双重组合......

或者有没有办法在课堂上做这种类型的动作?

目前我在任何地方这样做我通过if语句分配一个值,我假设有更好的方法吗?

2 个答案:

答案 0 :(得分:2)

您可以推出自己的Dictionary类并使用自定义Add()函数(和其他函数)。像这样:

class MyCustomDictionary : Dictionary<string, Aircraft>
{
  public new Add(string key, Aircraft value)
  {
    if (YOUR_CONDITION)
    {
      base.Add(key, value);
    }
  }
}

您应该在此处注意使用new关键字。无法覆盖Add()函数,因为基类未将其定义为overridable。因此,您必须在定义中使用new

答案 1 :(得分:0)

我必须诚实地对你说,我对你要求的内容感到困惑......但是,我发现你的示例代码存在一些问题,可能导致你的问题。 #39;重新体验?

首先, IDictionary 是一个集合对象接口,但你将它视为一个数组,这对我来说有点可疑。

其次,飞机是一个类,但是在为FlightStatus设置值时你没有初始化它。

所以你应该做的是:

aircraftList.Add(strKey, new Aircraft() {FlightStatus = strFlying});

Aircraft ac = new Aircraft();

// set the ac values
ac.FlightStatus = strFlying;

aircraftList.Add(strKey, ac);

您可以在将对象添加到字典之前添加条件语句。

最后,在询问添加事件之前时,您的意思是什么?如果你按照dotNET的例子,你可以在Add()方法声明中添加自己的OnBeforeEvent方法/ Invoke()。