我正在从另一个类中通过反射检索画笔列表。我想确保这个列表中的一些刷子是不透明的(#00FFFFFF)。但是,将它与Brushes.Transparent进行比较会返回false,尽管这个值实际上是#00FFFFFF。
var brushes = GetListOfBrushes();
var brush = brushes.First(c => c != Brushes.Transparent);
Console.WriteLine(brush); // Prints "#00FFFFFF"在这种情况下,唯一可靠的方法是检查它的字符串表示形式,如果它以`#00开头,“这感觉很麻烦。
在下面的示例屏幕快照中,从First()调用返回的画笔与谓词匹配,尽管它不应该:

发布于 2016-07-06 12:02:59
由于您比较笔刷,您可能想做Cast<SolidColorBrush>()或做一些预过滤,如果它们不是所有的纯色(即,不是默认的Transparent )。
然后您可以将brush.Color与Brushes.Transparent.Color进行比较。
发布于 2016-07-06 12:08:16
根据您的字符串表示形式,我推断您使用的是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);但是也许你会想要比较更多的属性,这取决于你的需求或者你想要如何识别那个特殊的画笔。
https://stackoverflow.com/questions/38223479
复制相似问题