2014-03-03 82 views
-3

這裏是在.NET 4.0中的另一個怪癖,我發現:2個System.Drawing.Brushes比較失敗

當我要檢查,如果一個變量,它擁有System.Drawing.Brush,擁有一定的刷子,如:

using System.Drawing; 

HisCell.Col == Brushes.White 

它有時會失敗,儘管事實上我早些時候將Brushes.White分配到HisCell.Col

我該如何解決這個bug?

+4

使用調試器。如果它不是Brushes.White,那還有什麼?也許這是你的錯? .NET Framework中的錯誤並非不可能,但是您自己的代碼中的錯誤更有可能。 – nvoigt

+0

每當有些失敗'有時'懷疑你的代碼! –

+0

你不想解決這個bug,你想修復bug。機會是,錯誤在*你的*代碼中。找到每個改變'HisCell.Col'的地方,你會發現其他一些代碼正在修改它的引用。 – NathanAldenSr

回答

1

Brushes類創建其Brush對象的線程本地副本。因此,如果您在另一個線程上做了Brushes.White設置爲的值的比較,那麼它們將會是不同的對象,並且會導致平等中的錯誤,因爲Brush未實現相等性,因此會執行參考平等。