C# 比较两个颜色对象

C# 比较两个颜色对象,c#,.net,colors,system.drawing,C#,.net,Colors,System.drawing,这是VS2010和.NET4.0。我试图比较两个System.Drawing.Color对象 mStartColor.ToArgb()的值为16777215 Color.Transparent.ToArgb()的值为16777215 mStartColor Color.Transparent的值为True 如何为颜色对象实现相等 编辑 谢谢大家。我得到了我的答案,尽管这对我来说没有多大意义(见下面我对Tim和Dave答案的评论)。我会将Tim的帖子标记为答案,他是第一个回复的人,但Dave的答案

这是VS2010和.NET4.0。我试图比较两个
System.Drawing.Color
对象

mStartColor.ToArgb()的值为
16777215

Color.Transparent.ToArgb()的值为
16777215

mStartColor Color.Transparent的值为
True

如何为
颜色
对象实现相等

编辑
谢谢大家。我得到了我的答案,尽管这对我来说没有多大意义(见下面我对Tim和Dave答案的评论)。我会将Tim的帖子标记为答案,他是第一个回复的人,但Dave的答案同样具有信息性。

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

以下是有关扩展方法的说明。

请务必阅读第一条:

“要仅根据颜色的ARGB值比较颜色,应使用 ToArgb方法。这是因为Equals和Equality成员 确定等效性时使用的不仅仅是 颜色。例如,不考虑黑色和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 
颜色。来自argb(16777215)

相等比较将使用所有这些来确定相等。您应该使用您已经提出的建议,并使用:

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

谢谢这确实有帮助(事实上是一个精确的答案),但对我来说没有多大意义。如果它们在所有实际用途上都是相等的,为什么它们的对象不相等?@dotNET:因为它们在严格意义上不是相同的颜色。我不知道哪里到处都使用
Color.Equals
或Color-
=
。因此,即使一种颜色看起来像另一种颜色,如果它没有相同的名称或相同的
KnownColor
,它也不相同。谢谢Dave。与下面Tim的答案大致相同。我不喜欢的是,您列出的所有其他字段都是只读的,并且可能直接基于A、R、G和B的值来计算它们的值。那么为什么Equals()不能按我们期望的方式工作呢?我假设所有“系统”颜色都是预定义为常量的
Color.Transparent.ToArgb().Equals(mStartColor.ToArgb())