2
的代码第一部分:Excel工作表对象不等于同一工作表对象
activeWorksheet = Globals.ThisAddIn.Application.ActiveSheet;
var allWorksheets = new List<Worksheet>();
这是我测试:
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中的工作表是否存在一些奇怪的背景行为?我已经暂时比较了工作表名称,但是这不应该起作用吗?
你能发布更多的代码吗?如何/在哪里宣布activeWorksheet'以及它是如何设置的? ''''allWorksheets'''的问题相同。 – dee
更新了我的答案。 – Peroxy
我只能猜测......在这里,编译器关闭了在lambda表达式之外声明的变量,并且编译器可能必须创建一个包含执行代码所需的所有变量的新类。您将不得不反编译并观察生成的内容,以便了解为什么最后的比较返回false。 – dee