Excel工作表对象不等于相同的工作表对象

代码的第一部分:

activeWorksheet = Globals.ThisAddIn.Application.ActiveSheet; var allWorksheets = new List<Worksheet>(); 

这是我正在testing:

 allWorksheets.Add(activeWorksheet); Debug.WriteLine(activeWorksheet.Name); //prints Sheet1 Debug.WriteLine(allWorksheets[0].Name); //prints Sheet1 Debug.WriteLine(allWorksheets[0] == activeWorksheet); //prints true 

当我在后台运行这个任务时,它不起作用。 当我执行最后的比较时,即使它打印Sheet1和Sheet1,它也会返回false

 new Task(() => { allWorksheets.Add(activeWorksheet); Debug.WriteLine(activeWorksheet.Name); //prints Sheet1 Debug.WriteLine(allWorksheets[0].Name); //prints Sheet1 Debug.WriteLine(allWorksheets[0] == activeWorksheet); //prints false } 

Excel中的工作表是否有一些奇怪的背景行为? 我已经临时比较了工作表名称,但不应该这样工作吗?

我有一个类似的问题。 我为Interop.Excel.Worksheet创build了一个包装对象,并实现了这个equals方法:

  Public Overrides Function Equals(obj As Object) As Boolean Dim other = TryCast(obj, Worksheet) If other Is Nothing Then Return False Return ParentsAreEqual(other) AndAlso _worksheet.Name.Equals(other._worksheet.Name) End Function Private Function ParentsAreEqual(other As Worksheet) As Boolean Dim result As Boolean Try result = _worksheet.Parent.Equals(other._worksheet.Parent) Catch ex As Exception result = False End Try Return result End Function Public Overrides Function GetHashCode() As Integer Try Return _worksheet.Parent.GetHashCode() Xor _worksheet.Name.GetHashCode Catch ex As Exception Return 42 End Try End Function