为什么listbox1.Items.Add使用我的对象的Equals方法?

时间:2012-01-02 17:09:28

标签: c# .net listbox equals

我在仔细检查Windows窗体ListBoxCollection添加方法, 在分析过程中,我发现方法“add”在base Object中调用Equals方法 为什么这个方法会做这个动作?


我使用过“Call Stack”,我找到了这个答案:

我们调用:System.Windows.Forms.ListBox.ObjectCollection.Add(object item)

它将调用:System.Windows.Forms.ListBox.ObjectCollection.AddInternal(object item)

它将调用:System.Windows.Forms.ListBox.NativeAdd(object item)

它将调用:System.Windows.Forms.ListControl.GetItemText(object item)

它将调用:System.Windows.Forms.Formatter.FormatObject(object value,System.Type targetType,System.ComponentModel.TypeConverter sourceConverter,System.ComponentModel.TypeConverter targetConverter,string formatString,System.IFormatProvider formatInfo,object formattedNullValue ,object dataSourceNullValue)

它将调用:System.Windows.Forms.Formatter.IsNullData(object value,object dataSourceNullValue)

最后它将调用:object.Equals(object objA,object objB)

此方法使我的等同方法也运行:

WindowsFormsApplication1.Student.Equals(object obj)

和将发送到我的等于方法的最后一个参数(作为obj)是一个DBNULL对象! 什么是DBNULL?

1 个答案:

答案 0 :(得分:2)

因为它需要能够知道哪个项目正在触发事件。如果对象是完全相同的对象,则选择,编辑,删除变得困难和混乱。