首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么这个具有#00FFFFFF值的刷不等于Brushes.Transparent?

为什么这个具有#00FFFFFF值的刷不等于Brushes.Transparent?
EN

Stack Overflow用户
提问于 2016-07-06 12:00:05
回答 2查看 4.2K关注 0票数 3

我正在从另一个类中通过反射检索画笔列表。我想确保这个列表中的一些刷子是不透明的(#00FFFFFF)。但是,将它与Brushes.Transparent进行比较会返回false,尽管这个值实际上是#00FFFFFF

代码语言:javascript
复制
var brushes = GetListOfBrushes();
var brush = brushes.First(c => c != Brushes.Transparent);    
Console.WriteLine(brush); // Prints "#00FFFFFF"

在这种情况下,唯一可靠的方法是检查它的字符串表示形式,如果它以`#00开头,“这感觉很麻烦。

在下面的示例屏幕快照中,从First()调用返回的画笔与谓词匹配,尽管它不应该:

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-07-06 12:02:59

由于您比较笔刷,您可能想做Cast<SolidColorBrush>()或做一些预过滤,如果它们不是所有的纯色(即,不是默认的Transparent )。

然后您可以将brush.ColorBrushes.Transparent.Color进行比较。

票数 2
EN

Stack Overflow用户

发布于 2016-07-06 12:08:16

根据您的字符串表示形式,我推断您使用的是System.Windows.Media.Brush,而不是System.Drawing.Brush

System.Windows.Media.Brush还没有实现自己版本的Equals()。所以你的比较

代码语言:javascript
复制
c != Brushes.Transparent

只对引用等式进行比较,而不对相同值进行比较。一种解决办法是比较不透明的地方:

代码语言:javascript
复制
var brush = brushes.First(c => c.Opacity != Brushes.Transparent.Opacity);

但是也许你会想要比较更多的属性,这取决于你的需求或者你想要如何识别那个特殊的画笔。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38223479

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档