为什么选择Color.FromArgb(255,255,255,255)!= Color.White?

abe*_*nci 14 .net gdi+

为什么Color.FromArgb(255,255,255,255)等于Color.White?有没有内置的方法来比较A,R,G,B值而不是颜色名称?

谢谢.

Nic*_*ick 17

请参阅http://msdn.microsoft.com/en-us/library/e03x8ct2(VS.85).aspx

此结构仅与其他Color结构进行比较.要仅根据其ARGB值比较颜色,您应该使用ToArgb方法.这是因为Equals和op_Equality成员使用的不仅仅是颜色的ARGB值来确定等效性.例如,Black和FromArgb(0,0,0)不被认为是相等的,因为Black是命名颜色而FromArgb(0,0,0)不是.

  • 只是为了补充一点,System.Windows.Media*中的颜色类在ARGB上是等效的'System.Windows.Media.Color.FromArgb(255,255,255,255)== System.Windows.Media.Colors.White '确实如此 (5认同)

Dan*_*Tao 5

添加到Nick的(正确的)答案:如果你真的想要,你可以编写自己的IEqualityComparer<Color>实现并使用它,例如,你可能正在编写处理颜色的任何算法,在颜色平等确定方面你需要灵活性.

你知道,像:

public class ColorComparer : IEqualityComparer<Color>
{
    public bool Equals(Color x, Color y)
    {
        return x.ToArgb() == y.ToArgb();
    }

    public int GetHashCode(Color color)
    {
        return color.ToArgb();
    }
}
Run Code Online (Sandbox Code Playgroud)