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