比较两个Color对象

时间:2014-01-08 11:46:11

标签: c# .net colors system.drawing

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

mStartColor.ToArgb()的值为16777215

Color.Transparent.ToArgb()的值为16777215

mStartColor <> Color.Transparent的值为True

如何为Color个对象实现平等?

修改

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

3 个答案:

答案 0 :(得分:14)

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

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())

答案 1 :(得分:11)

请务必先阅读documentation

  

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

答案 2 :(得分:0)

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

以下是关于扩展方法的MSDN Documentation