这是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 文档。