【问题标题】:Comparison between 2 System.Drawing.Brushes fails2 System.Drawing.Brushes 之间的比较失败
【发布时间】:2014-04-04 18:21:21
【问题描述】:

这是我在 .net 4.0 中发现的另一个怪癖:

当我想检查一个包含System.Drawing.Brush 的变量是否包含某个Brush,例如:

using System.Drawing;

HisCell.Col == Brushes.White

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

我该如何解决这个错误?

【问题讨论】:

  • 使用调试器。如果不是 Brushes.White,那还有什么?也许是你的错? .NET Framework 中的错误并非不可能,但您自己的代码中的错误可能性更大。
  • 每当出现故障时,“有时”都会怀疑您的代码!
  • 你不想解决这个错误,你想修复这个错误。很有可能,该错误在 您的 代码中。找到每个更改 HisCell.Col 的地方,你可能会发现其他一些代码正在修改它的引用。
  • 不处理 System.Drawing 对象是 .NET 程序中的标准缺陷。工作了很长一段时间,每个似乎都工作得很好。直到重绘的数量超过垃圾收集器的运行速度,然后再进行kaboom。不要丢弃 Brushes.White btw,其他的。

标签: c# .net brushes


【解决方案1】:

Brushes 类创建其Brush 对象的线程本地副本。因此,如果您将 Brushes.White 与另一个线程上 set 的值进行比较,它们将是不同的对象并导致相等的错误,因为 Brush 没有实现相等,因此请参考将执行平等。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-03
    • 1970-01-01
    • 1970-01-01
    • 2017-11-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多