比较两个颜色对象



这是VS2010和.NET 4.0。我正在尝试比较两个System.Drawing.Color对象。

mStartColor.ToArgb()的值是 16777215

Color.Transparent.ToArgb()的值是 16777215

mStartColor <> Color.Transparent的值是 True

如何为Color对象实现相等?

编辑

谢谢大家。我得到了答案,尽管这对我来说没有多大意义(请参阅下面我对蒂姆和戴夫答案的评论)。我将蒂姆的帖子标记为答案,他是第一个回复的人,但戴夫的回答同样翔实。

始终先阅读文档:

"要仅根据颜色的ARGB值来比较颜色,您应该使用 ToArgb 方法。这是因为平等和平等成员 确定等价性,而不仅仅是使用 ARGB 值 颜色。例如,不考虑 Black 和 FromArgb(0,0,0) 相等,因为黑色是命名颜色,而 FromArgb(0,0,0) 不是"

颜色结构中包含更多数据,而不仅仅是实际的颜色信息,例如

Color [Transparent] 
R: 255 
G: 255 
B: 255 
A: 0 
IsKnownColor: True 
IsEmpty: False 
IsNamedColor: True 
IsSystemColor: False 
Name: Transparent 

Color.FromArgb(16777215)

Color [A=0, R=255, G=255, B=255] 
R: 255 
G: 255 
B: 255 
A: 0 
IsKnownColor: False 
IsEmpty: False 
IsNamedColor: False 
IsSystemColor: False 
Name: ffffff 
相等

比较将使用所有这些来确定相等性。 你应该按照你已经建议的内容,并使用:

Color.Transparent.ToArgb().Equals(mStartColor.ToArgb())

您可以编写一个扩展方法,该方法将比较两个颜色对象的 ARGB 值,如果它们相同,则返回 true。

下面是有关扩展方法的 MSDN 文档。

最新更新