C# 2个System.Drawing.Brush之间的比较失败

C# 2个System.Drawing.Brush之间的比较失败,c#,.net,brushes,C#,.net,Brushes,在.net 4.0中,我发现了另一个怪癖: 当我想检查一个变量(它包含一个System.Drawing.Brush)是否包含一个特定的画笔时,比如: using System.Drawing; HisCell.Col == Brushes.White 它有时会失败,尽管之前我将brush.White分配给HisCell.Col 如何解决此错误?该笔刷类创建其笔刷对象的线程本地副本。因此,如果您将Brush.White与另一个线程上设置的值进行比较,它们将是不同的对象,并导致相等为false,

在.net 4.0中,我发现了另一个怪癖:

当我想检查一个变量(它包含一个
System.Drawing.Brush
)是否包含一个特定的画笔时,比如:

using System.Drawing;

HisCell.Col == Brushes.White
它有时会失败,尽管之前我将
brush.White
分配给
HisCell.Col


如何解决此错误?

笔刷
类创建其
笔刷
对象的线程本地副本。因此,如果您将
Brush.White
与另一个线程上设置的值进行比较,它们将是不同的对象,并导致相等为false,因为
Brush
未实现相等,因此将执行引用相等。

使用调试器。如果不是刷子,白色,那是什么?也许是你的错?.NET Framework中的错误并非不可能,但您自己的代码中的错误更可能发生。每当出现故障时,请“有时”怀疑您的代码!你不想绕过这个bug,你想修复这个bug。很可能,错误就在代码中。找到每一个发生变化的地方,
HisCell.Col
,你很可能会发现其他代码正在修改它的引用,而不是处理系统。绘图对象是.NET程序中的一个标准缺陷。工作了相当长一段时间,每一个似乎都很好。直到重新绘制的次数超过垃圾回收器的运行速度,kaboom才会停止。不要丢弃刷子。顺便说一句,白色的,其他的。