这个C#,VS2010和.NET 4.0。我正在尝试比较两个System.Drawing.Color
个对象。
mStartColor.ToArgb()
的值为16777215
。
Color.Transparent.ToArgb()
的值为16777215
。
mStartColor <> Color.Transparent
的值为True
。
如何为Color
个对象实现平等?
谢谢大家。我得到了答案,虽然这对我没有多大意义(请参阅我对蒂姆和戴夫下面的答案的评论)。我将蒂姆的帖子标记为答案,他是第一个回复的人,但戴夫的回答同样有用。
答案 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。