为什么这个刷子的#00FFFFFF值不等于Brushes.Transparent?
我正在通过另一个类的reflection检索画笔列表。 我想确保此List中的某些Brush 不是透明的( #00FFFFFF
)。 但是,将它与Brushes.Transparent
进行比较会返回false,即使该值实际上是#00FFFFFF
。
var brushes = GetListOfBrushes(); var brush = brushes.First(c => c != Brushes.Transparent); Console.WriteLine(brush); // Prints "#00FFFFFF"
在这种情况下唯一可靠的方法是检查它的字符串表示,如果它以“#00”开头,感觉很黑。
在下面的示例屏幕截图中,从First()
调用返回的Brush与谓词匹配,尽管它不应该:
由于您比较画笔,您可能想要进行Cast
或者如果它们不是全纯色(即默认情况下Cast
,则进行一些预过滤。
然后,您可以将brush.Color
与Brushes.Transparent.Color
进行比较。
从您的字符串表示我推断您使用System.Windows.Media.Brush
而不是System.Drawing.Brush
。
System.Windows.Media.Brush
尚未实现自己的Equals()
版本。 所以你的比较
c != Brushes.Transparent
仅比较参考相等而不是相等值。 一种解决方案是比较不透明度:
var brush = brushes.First(c => c.Opacity != Brushes.Transparent.Opacity);
但也许你会想要比较一些更多的属性,这取决于你的需求或你想如何识别特殊刷。