C# 比较两个颜色对象
这是VS2010和.NET4.0。我试图比较两个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的答案
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())